【发布时间】:2012-01-28 01:49:42
【问题描述】:
我有一系列表格,我希望它们都有一个订单字段。于是我做了一个抽象模型:
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 中的“订单”字段,所以我制作了以下 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 可以覆盖。可以这样做吗?
【问题讨论】:
-
当然。如果在您的
ChapterAdmin中设置list_display = ("title",),您将如何期望它是其他任何东西?如果你想要order和title,你需要一个告诉list_display = ("order", "title")的语句。 @SimonKagwi 为您提供了一种方便且干燥的方式。
标签: django django-admin