Hello! As you see on the documentation ( https://docs.djangoproject.com/en/2.0/topics/class-based-views/) for the class based views, any arguments you pass to the class based view .as_view() method will override attributes of the class based view, so if you set MyCView.as_view(model=Foo) is the same as setting class MyCView: model=Foo directly.
Now to access the field names of the Model, you used to be able to call a .get_field_names() or something like that but that is depreciated since 1.10. Now to do that you should use the Model._meta to get_fields(). Check the documentation for the Model._meta to check its full potential. Hope it helps! On Wed, Jun 6, 2018, 07:33 Mikkel Kromann <[email protected]> wrote: > 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]>: >> >>> 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]. >>> 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/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 > <https://groups.google.com/d/msgid/django-users/95db9cca-58ca-4460-ae39-9150bb199bff%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/CABF8kZPUE%3D28An1Qv5zDurb2y%3DohhTkYN-hxAgVLDhhR7m24bA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

