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

Show inline model field in list_display

我有两种型号:

1
2
3
4
5
class Person(models.Model):
    person_name = models.CharField(max_length=255)

    def __unicode__(self):
        return self.person_name

1
2
3
4
5
6
7
8
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

行政副总裁

1
2
3
4
5
6
7
8
class PersonAdmin(admin.ModelAdmin):
    inlines = ('BookInline',)
    list_display = ('person_name', ...)

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

PersonAdmin列表显示中,如何显示内联模型Book字段(标题、名称、电子邮件)。

所以当我访问django admin中的Person条目列表时,我看到:

person namebook namebook yearbook email


PersonAdminlist_display表示每个人显示一次。包含图书模型中的属性并不是很有意义,因为如果他们有多本书,那么您必须多次包含此人。

把这个人的名字写在书的list_display上不是更好吗?

1
2
3
4
5
6
7
8
class BookAdmin(admin.ModelAdmin):
    inlines = ('BookInline',)
    list_display = ('person_name', 'book_name', 'book_email', 'book_year')

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

admin.site.register(Book, BookAdmin)


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

叠加将解决您的问题


根据文档,您可以使用Callable来显示字段。