Django:为自动生成的通过模型的StackedInline设置友好的标题?

11 投票
2 回答
2110 浏览
提问于 2025-04-16 11:25

我正在使用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 个回答

3

出于某种原因,那个(确实现在有点旧了)被接受的答案对我来说没用。

不过,这个修改确实改变了标题:

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

这里的 field 是指多对多的字段。

12

我以前从来没有用过这样的多对多字段,感谢你!我学到了新东西。

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

1: 直接用一个新函数重新定义 __unicode__ 函数

class MyInline(admin.TabularInline):
    MyModel.m2m.through.__unicode__ = lambda x: 'My New Unicode'
    model = MyModel.m2m.through

2: 为 m2m.through 模型设置一个 代理模型,然后使用这个模型

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

class MyInline(admin.TabularInline):
    model = MyThrough

撰写回答