0

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

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

简单,哈?

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

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

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

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

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

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

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

提前致谢

4

1 回答 1

1

嗯,我自己发现了。

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

喜欢:

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

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

于 2013-06-12T16:14:47.717 回答