返回
Django ModelAdmin 中使用 __ 操作符显示外键字段的属性
python
2024-03-20 15:43:25
如何在 Django ModelAdmin 中的“list_display”显示外键字段的属性
问题:
在 Django 的 ModelAdmin 中,我们希望在 list_display
中显示外键字段的属性。例如,对于模型 Person
和 Book
,我们希望显示 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()
方法来预取外键字段的数据。但是,使用__
操作符通常更简单、更直接。