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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to