返回

Django ModelAdmin 中使用 __ 操作符显示外键字段的属性

python

如何在 Django ModelAdmin 中的“list_display”显示外键字段的属性

问题:

在 Django 的 ModelAdmin 中,我们希望在 list_display 中显示外键字段的属性。例如,对于模型 PersonBook,我们希望显示 book.author

解决方法:

可以使用 __(双下划线)操作符来实现。在 PersonAdmin 中,我们可以使用以下代码:

class PersonAdmin(admin.ModelAdmin):
    list_display = ['book__author',]

详细说明:

使用 __ 操作符,我们可以遍历外键字段并访问其属性。在我们的示例中,book 是一个外键字段,author 是其属性。因此,book__author 表示 Person 模型中 book 字段的 author 属性。

优点:

使用此方法,我们可以轻松地显示复杂模型中的相关数据,使管理界面更加灵活。

示例:

为了更清楚地说明,让我们创建一个 Person 实例并显示其 book 的作者:

from django.contrib.auth.models import User
user = User.objects.create_user('john', 'lennon@thebeatles.com', 'password')
book = Book.objects.create(author='John Lennon')
person = Person.objects.create(book=book)
PersonAdmin(Person, admin.site).list_display(('book__author',))

输出:

['John Lennon']

总结:

通过使用 __ 操作符,我们可以轻松地在 Django ModelAdmin 的 list_display 中显示外键字段的属性。这使得我们能够在管理界面中显示更加复杂和有意义的数据。

常见问题解答

  • 我可以使用 __ 操作符访问外键字段的多个属性吗?
    是的,您可以使用 __ 操作符访问外键字段的多个属性。例如,book__author__email 表示 Person 模型中 book 字段的 author 属性的 email 属性。
  • __ 操作符只能用于外键字段吗?
    不,__ 操作符可以用于任何字段类型,包括外键字段、字符串字段、日期字段等。
  • 如何访问嵌套的外键字段?
    您可以使用多个 __ 操作符来访问嵌套的外键字段。例如,book__author__publisher__name 表示 Person 模型中 book 字段的 author 属性的 publisher 属性的 name 属性。
  • 为什么我的 __ 操作符不起作用?
    确保您正确地使用了 __ 操作符,并且外键字段具有您尝试访问的属性。另外,检查您的模型是否有任何循环导入,因为这可能会导致 __ 操作符无法正常工作。
  • 是否还有其他方法可以访问外键字段的属性?
    是的,您还可以使用 select_related()prefetch_related() 方法来预取外键字段的数据。但是,使用 __ 操作符通常更简单、更直接。