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.