Django admin model Inheritance is it possible?

django, django-admin, django-models, pinax, python

Solution

Maybe it is bit to late for you for the answer, but I think others can have similar problem - as I did.

Here is my solution - I am not sure if it is proper, but it works for me and non other from above can do the same (assuming that you want a multitable inheritance (non abstract model), as I do)

class SiteEntityAdmin(admin.ModelAdmin):
    fieldsets = [
            (None, {'fields': ['name']}),
    ]


class PhotoAdmin(SiteEntityAdmin):
    fieldsets = [
             ('Photo details', {'fields': ['photo_url', 'description']}),
    ]
    fieldsets.insert(0, SiteEntityAdmin.fieldsets[0])

Problem

Is inheritance possible in admin Models ? Like For Example consider the following , File : `models.py` ``` class AbstractModel ( models.Model ): # Meta Information common to all classes author = models.ForeignKey(auth.models.User , null = False ,related_name="%(class)s_related_author" ) # The user who created editor = models.ForeignKey(auth.models.User , null = True,related_name="%(class)s_related_editor" ) # The user who last edited created_at = models.DateTimeField(auto_now_add = True) # Create Time edited_at = models.DateTimeField(auto_now = True) # Modify Time class Meta: abstract = True class Topic( AbstractModel ): name = models.CharField(max_length = NameMaxLength , unique = True) version_number = models.IntegerField(default = 0) update_frequency = models.IntegerField() ``` A similar inheritance does not seem to produce the correct result when used in `ModelAdmin` File : `admin.py` ``` class Abstract_Admin_Model( admin.ModelAdmin ): fields = ('author' , 'editor' , 'created_at' , 'edited_at') readonly_fields = ('author' , 'editor' , 'created_at' , 'edited_at') def save_model(self, request, obj, form, change): if not change : obj.author = request.user else : obj.editor = request.user obj.save() class Admin_Topic( Abstract_Admin_Model ): fields += ('name' , 'version_number' , 'update_frequency') admin.site.register( Topic , Admin_Topic ) ``` EDIT: I've modified the above model based on suggestions , If the `admin.py` is like so , I don't get any error , and the model appears on the admin. ``` class AbstractAdminModel( admin.ModelAdmin ): pass#fields = ['author' , 'editor' , 'created_at' , 'edited_at'] class Admin_Topic( AbstractAdminModel ): pass admin.site.register( Topic , Admin_Topic ) ``` But If i modify it like so ``` class AbstractAdminModel( admin.ModelAdmin ): fields = ['author' , 'editor' , 'created_at' , 'edited_at'] class Admin_Topic( AbstractAdminModel ): pass admin.site.register( Topic , Admin_Topic ) ``` I get the following error : Here is a stack trace Link Problem : The model does not even appear on the Admin Page Extra Info: using django 1.2.5 with pinax 0.7.2 , Ubuntu 11.04 , python 2.7.1+

Original source

Related problems