2011-12-26 65 views
3

我有一系列我希望都具有订单字段的表。所以我做了一个抽象的模型:从自定义模型继承时保留ModelAdmin属性(list_display等)

​​

我不希望他们更改change_view“命令”字段,所以我提出以下的ModelAdmin:

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

这很好,只要从OrderedModel继承的每个模型不需要list_display,list_editable或readonly_fields中的更多项目。

class Chapter(OrderedModel): 
    title = models.CharField(max_length=32) 

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

我注意到,有一个get_readonly_fields,我可以改变,以确保“订单”被添加到readonly_fields,但没有:例如,由于订单是在list_editable但不list_display下面会产生一个错误get_list_display或get_list_editable来重写。是否有可能做到这一点?

+0

当然。如果你在'ChapterAdmin'中设置了'list_display =(“title”,)'你会如何期待它成为其他东西?如果你想要'订单'和'标题',你需要一个告诉'list_display =(“order”,“title”)'的语句。 @SimonKagwi给你一个方便,干爽的方式。 – Stan 2011-12-26 23:19:35

回答

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

请提供更多信息,因为不是每个人都能理解为什么这是答案。谢谢。 – fuzzy 2011-12-26 22:45:38

+1

@Fuzzy,'tuples'是不可变的,但你可以[用'+'运算符]连接它们(http://docs.python.org/reference/expressions.html#binary-arithmetic-operations)。因此,在这里你将'OrderedAdmin.list_display' - '(“order”,)' - 与'(“title”,)''连接起来。这个操作的结果是一个新的元组''(“order”,“title”)'。 – Stan 2011-12-26 23:30:48

+0

@Stan:好的!谢谢 – 2011-12-27 07:31:07

相关问题