在继承自定义模型时保留ModelAdmin属性(list_display等)



我有一系列表,我希望它们都有一个订单字段。所以我做了一个抽象模型:

class OrderedModel(models.Model):
    order = models.IntegerField(default=-1)
    def _order(self):
        pass #ordering widget for changelist_view
    _order.allow_tags = True
    def save(self,*args,**kwargs):
        #set order = 0 if < 0
        super(OrderedModel,self).save(*args,**kwargs)
    class Meta:
        abstract = True

我不希望他们改变change_view中的"order"字段,所以我创建如下ModelAdmin:

class OrderedAdmin(models.ModelAdmin):
    list_display = ("__str__","_order","order")
    list_editable = ("order",)
    readonly_fields = ("order",)

只要从OrderedModel继承的每个模型不需要在list_display、list_editable或readonly_fields中添加任何项,就可以了。例如,下面的命令会产生一个错误,因为order在list_editable中,而不在list_display中:

class Chapter(OrderedModel):
    title = models.CharField(max_length=32)
class ChapterAdmin(OrderedAdmin):
    list_display = ("title",)

我注意到有一个get_readonly_fields,我可以改变,以确保"顺序"被添加到readonly_fields,但没有get_list_display或get_list_editable覆盖写。这可能吗?

class ChapterAdmin(OrderedAdmin):
    list_display = OrderedAdmin.list_display + ("title",)

最新更新