Thanks for the advice, Andréas.
But the response is the same:

  File "C:\Users\ ... xxxxxxx   ... \items\views.py", line 7, in 
ItemUpdateView
    fields = self.model.fields
NameError: name 'self' is not defined



As far as I understood, model is an attribute, not a method (though I'm new 
to Python and Django, so I'm unsure about this).
Does attribute/method make a difference in this case?

cheers, Mikkel
tirsdag den 5. juni 2018 kl. 22.10.31 UTC+2 skrev Andréas Kühne:
>
> Hi,
>
> Have you tried self.model? It should be present in all methods in the 
> class?
>
> Regards,
>
> Andréas
>
> 2018-06-05 21:56 GMT+02:00 Mikkel Kromann <[email protected] 
> <javascript:>>:
>
>> Dear Django-users.
>>
>> I'm slowly working towards a Django "data-warehouse" framework, where I 
>> can easily add a lot of models (each containing a table with data), while 
>> sticking to only few reusable views.
>>
>> I've realised that in urls.py, it is possible to specify the model on 
>> which the UpdateView is going to do its magic.
>> This allows me to use a generic UpdateView (which I called 
>> ItemUpdateView) and template for all my models, which will save me a ton of 
>> almost identical lines of code.
>>
>> However, in the generic ItemUpdateView, I of course need to specify the 
>> fields of the specific model chosen in urls.py.
>> As I ideally only want a few generic views (i.e. ItemCreateView, 
>> ItemUpdateView, ItemDeleteView and ItemListView), I've chosen to place the 
>> field array in my model definition, hoping to be able to access it from my 
>> generic Class Based Views
>>
>> But how do I access the model attribute in (Item)UpdateView
>>
>>
>> thanks, Mikkel
>>
>> From views.py
>> from django.views.generic import CreateView, ListView, UpdateView, 
>> DeleteView
>>
>> class ItemUpdateView(UpdateView):
>>     template_name = "item_form.html"
>> # How do I access the model attribute of ItemUpdateView as given in 
>> urls.py?
>> # This line below returns the error "NameError: name 'model' not defined"
>>     fields = model.fields
>>
>> From urls.py
>> from django.urls import path
>> from . views import ItemUpdate
>> from . models import Region, Location
>>
>> # Awesome! I can specify the model to be used by ItemUpdateView
>> urlpatterns = [
>>     path('update/region/<pk>',    ItemUpdateView.as_view(model=Region), 
>>     name='region_update'),
>>     path('update/location/<pk>',  ItemUpdateView.as_view(model=Location), 
>>   name='location_update'),
>> ] 
>>
>>
>>
>> From models.py (Region and Location are only two of my tables, I'd like 
>> to have say 20 or 30 models 
>> from django.db import models
>>
>> # Abstract class for our items including common methods, data and 
>> definitions
>> class ItemModel(models.Model):
>>
>>     fields = [ 'label', 'short', 'descr' ]
>>     label   = models.CharField(max_length=10)
>>     short   = models.CharField(max_length=15)
>>     descr   = models.CharField(max_length=40)
>>
>>     def __str__(self):
>>         return self.short
>>
>>     class Meta:
>>         abstract = True
>>
>> class Region(ItemModel):
>>     fields  = [ 'label', 'short', 'descr' ]
>>
>> class Location(ItemModel):
>>     fields  = [ 'label', 'short', 'descr', 'region' ]
>>     region  = models.ForeignKey(Region, on_delete=models.CASCADE)
>>
>> class Plant(ItemModel):
>>     fields  = [ 'label', 'short', 'descr', 'location', 'capex', 'opex', 
>> 'capacity' ]
>>     location= models.ForeignKey(Location, on_delete=models.CASCADE)
>>     capex   = models.DecimalField(decimal_places=3, max_digits=8)
>>     opex    = models.DecimalField(decimal_places=3, max_digits=8)
>>     capacity= models.DecimalField(decimal_places=3, max_digits=8)
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/ec4634e5-2279-49a7-9045-21712de87584%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/ec4634e5-2279-49a7-9045-21712de87584%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/95db9cca-58ca-4460-ae39-9150bb199bff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to