Django Admin对ManyToMany字段的自定义

2022-08-13  本文已影响0人  alue

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模型要省事。

上一篇下一篇

猜你喜欢

热点阅读