Django admin的字段显示依靠 verbose_name
和__str__
等属性来定义。
但是,ManyToManyField 有些特殊。它是通过额外生成一个模型表来实现的。当然,我们可以利用 through
字段,手动指定这张表,从而利用老办法手动控制admin中的显示。
更多的时候,我们并不指定 through
字段,而是依靠Django自动生成,这样更加省事,但也带来了困惑,此时在admin中,怎么指定模型的显示方式呢?
这里给出一个解决方案:
""" office跟duty是多对多关系 """
class DutyInline(admin.TabularInline):
model = Office.duties.through
model._meta.verbose_name = '关系的名称'
model._meta.verbose_name_plural = '关系的名称s'
model.__str__ = lambda obj: ''
model.office.field.verbose_name = '模型名称'
extra = 1
@admin.register(Duty)
class DutyAdmin(admin.ModelAdmin):
inlines = [
DutyInline,
]
在admin中,对model相关属性进行配置,同样能够实现自定义显示的功能,比指定through模型要省事。