更改列表页面上的 django admin 附加字段

Posted

技术标签:

【中文标题】更改列表页面上的 django admin 附加字段【英文标题】:django admin additional field on changelist page 【发布时间】:2013-06-07 18:14:59 【问题描述】:

嗯,我相信这是一个普遍的问题。

假设我有一个名为 Book 的模型和另一个名为 Author 的模型。 Author 是 Book 的外键。

简单吧?

在 BookAdmin 页面上,我想显示图书的作者。所以在 list_display 字段中我有:

list_display = ('book_name', 'author'.....)

然后我使用 django-debug-toolbar 来检查加载页面时执行的查询数。 已经执行了大约 100 多个查询。 (我在同一页上有 100 本书条目)

如果我不包括“作者”,则只有 5 个查询(类似的)。

我知道额外的查询来自外键。

我的问题是,当我们处理外键时,是否有办法减少正在执行的查询数量?

我不想执行任何复杂的操作。我只想在该外键模型中调用 unicode() 方法。

提前致谢

【问题讨论】:

【参考方案1】:

嗯,我自己发现了。

这样做的方法是覆盖 BookAdmin 类中的 queryset()

喜欢:

def queryset(self, request):
    return Book.objects.all().select_related('author')

就是这样。 Django 将在加载 Book 的同时加载 Author。所以只会有数据库命中而不是超过 100 次命中。

【讨论】:

以上是关于更改列表页面上的 django admin 附加字段的主要内容,如果未能解决你的问题,请参考以下文章

在 django 管理更改列表页面上的每条记录上添加按钮?

django admin中的更改列表显示链接

Django Admin -> 更改字段顺序,包括内联字段

简单更改Django Admin登录页面

如何在 django admin 中显示多个模型的更改列表?

Django Admin - RelatedObjectLookups - 它如何刷新和设置父窗口上的选择?