gpt4 book ai didi

django - 如何避免在 Django 中进行 n+1 选择?

转载 作者:行者123 更新时间:2023-12-04 03:23:12 26 4
gpt4 key购买 nike

我有一个非常简单的数据模型,视频和评论之间存在一对多的关系

class Video(models.Model):
url = models.URLField(unique=True)
.....

class Comment(models.Model):
title = models.CharField(max_length=128)
video = models.ForeignKey('Video')
.....

我想查询视频并获取整个对象图(带有所有评论的视频)。查看 sql,我看到它做了两个选择,一个用于视频,另一个用于评论。我该如何避免?我想加入并立即获取所有内容。

可以用 django 做到这一点吗?

最佳答案

对于外键,您可以使用 selected_related() :

Comment.objects.select_related('video').all()

它只会生成一个查询,为您收集评论和视频。

对于更复杂的事情(例如 M2M),您需要一个外部应用程序,例如 unjoinify进行优化,但它使用 SQL 查询将它们放回对象中。

如果你对此感到不舒服(我是),你有一些选择:
  • django-queryset-transform :不是完整的解决方案,但有帮助
  • django-batch-select :大约是 select_related适用于 M2M 和反向关系。
  • 关于django - 如何避免在 Django 中进行 n+1 选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388668/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com