编程语言
首页 > 编程语言> > python – Django管理模型继承是否可能?

python – Django管理模型继承是否可能?

作者:互联网

管理模型中是否可以继承?

像例子中考虑以下,

文件: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()

在ModelAdmin中使用时,类似的继承似乎不会产生正确的结果

文件: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 )

编辑:

我根据建议修改了上面的模型,

如果admin.py是这样的,我不会收到任何错误,模型会出现在管理员身上.

class AbstractAdminModel(  admin.ModelAdmin  ):
        pass#fields = ['author' , 'editor' , 'created_at' , 'edited_at']


class Admin_Topic( AbstractAdminModel ):
    pass

admin.site.register( Topic , Admin_Topic )

但如果我这样修改它

class AbstractAdminModel(  admin.ModelAdmin  ):
    fields = ['author' , 'editor' , 'created_at' , 'edited_at']


class Admin_Topic( AbstractAdminModel ):
    pass

admin.site.register( Topic , Admin_Topic )

我收到以下错误:

这是一个堆栈跟踪Link

问题:
该模型甚至没有出现在管理页面上

额外信息:

使用django 1.2.5与pinax 0.7.2,Ubuntu 11.04,python 2.7.1

解决方法:

也许你的答案有点迟,但我认为其他人可能会有类似的问题 – 正如我所做的那样.

这是我的解决方案 – 我不确定它是否正确,但它适用于我,而不是上面的其他人可以做同样的事情(假设你想要一个多重继承(非抽象模型),就像我一样)

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


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

标签:python,django,django-models,django-admin,pinax
来源: https://codeday.me/bug/20190613/1235923.html