Django:通过模型自动生成StackedInline的Friendlier标头?

时间:2011-02-08 02:25:53

标签: python django django-admin

我正在使用Django管理员StackedInline,如下所示:

class BookInline(admin.StackedInline):
    model = Book.subject.through
    verbose_name = 'Book'
    verbose_name_plural = 'Books with this subject'

class SubjectAdmin(admin.ModelAdmin):
    inlines = [
        BookInline,
    ]

一切正常,但标题非常难看:

Books With This Subject
Book: Book_subject object

任何人都知道如何摆脱或改变Book_subject object部分?

谢谢!

2 个答案:

答案 0 :(得分:8)

我从未使用像这样的m2m字段,谢谢!学到了新的东西。

我找到了解决问题的两种方法:

1:只需使用新功能

重新分配__unicode__功能
class MyInline(admin.TabularInline):
    MyModel.m2m.through.__unicode__ = lambda x: 'My New Unicode'
    model = MyModel.m2m.through

2:为m2m.through模型设置proxy model并使用该模型

class MyThrough(MyModel.m2m.through):
    class Meta:
        proxy = True
    def __unicode__(self):
        return "My New Unicode"

class MyInline(admin.TabularInline):
    model = MyThrough

答案 1 :(得分:1)

出于某种原因,(承认现在已经很久)接受的答案对我不起作用。

然而,这个修改改变了标题:

MyModel.field.through.__str__ = lambda x: 'New Title'

其中field是ManyToMany字段。