我有一个非常简单的数据模型,视频和评论之间存在一对多的关系
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 查询将它们放回对象中。
如果你对此感到不舒服(我是),你有一些选择:
select_related
适用于 M2M 和反向关系。 关于django - 如何避免在 Django 中进行 n+1 选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388668/