django 在list_display中显示内联模型字段

vvppvyoh  于 2023-01-14  发布在  Go
关注(0)|答案(3)|浏览(159)

我有两个模型:

class Person(models.Model):
    person_name = models.CharField(max_length=255)

    def __unicode__(self):
        return self.person_name

以及

class Book(models.Model):
    link = models.ForeignKey(Person)
    book_name = models.CharField(max_length=255)
    book_year = models.CharField(max_length=255)
    book_email = models.CharField(max_length=255)

    def __unicode__(self):
        return self.name

admin.py

class PersonAdmin(admin.ModelAdmin):
    inlines = ('BookInline',)
    list_display = ('person_name', ...)

class BookInline(admin.TabularInline):
    model = Book
    extra = 1
    max_num = 1

PersonAdmin list_display中,如何显示内联模型Book字段(标题、名称、电子邮件)?
所以当我访问django admin中的Person条目列表时,我看到:
x一个三个一个x一个四个一个x一个五个一个x一个六个一个

67up9zun

67up9zun1#

PersonAdminlist_display意味着每个人只显示一次,包含book模型的属性实际上没有意义,因为如果他们有多本书,那么你必须多次包含这个人。
在书的list_display中包含这个人的名字不是更好吗?

class BookAdmin(admin.ModelAdmin):
    inlines = ('BookInline',)
    list_display = ('person_name', 'book_name', 'book_email', 'book_year')

    def person_name(self, obj):
        return obj.link.person_name

admin.site.register(Book, BookAdmin)
gj3fmq9x

gj3fmq9x2#

根据文档,您可以使用可调用对象来显示字段。
编辑(2021年3月21日):到1.9文档的链接不再工作了,但是源代码仍然可用。2我也添加了到开发版本的链接。

kx5bkwkv

kx5bkwkv3#

class BookInline(admin.StackedInline):
   model = Book
   extra = 1
   max_num = 1

StackedInline将解决您的问题

相关问题