在 Django 管理列表视图中避免 n+1 查询

Eer*_*ist 6 django django-admin

我有一个 Django 模型:

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.PROTECT)

    @property
    def slug(self):
        return slugify(self.author.name)
Run Code Online (Sandbox Code Playgroud)

现在,如果我将slug字段添加到 admin list_display,每个实例都会有一个单独的查询。

如何只对所有实例进行一次查询?

我试图select_related在ModelAdmin课堂上使用,但我没有得到它的工作。

小智 9

您可以覆盖 ModelAdmin 的 get_queryset() 以添加您的 select_related。


    def get_queryset(self, request):
        return super().get_queryset(request).select_related('author')
Run Code Online (Sandbox Code Playgroud)