Django select_related不执行任何操作

问题描述 投票:1回答:1

我在django中有一个注释模型,其中包含对User模型的外键引用,我正在尝试查找(具有特定帖子ID的注释),然后加入/获取注释作者的用户数据。这就是我在做的

    result = Comment.objects.filter(post=post).select_related('user').order_by('-created_at')

返回结果时,得到的对象与添加select_related()函数之前得到的对象完全相同。我在这里想念什么吗?

python django
1个回答
1
投票

.select_related(..) [Django-doc]函数在查询中进行JOIN,因此将使用查询来加载相关.select_related(..)对象的数据。如果您不使用.user,则访问.select_related(..).user将导致额外的查询。因此,如果您需要加载NPosts的所有用户,则将进行N + 1个查询(这是著名的N + 1问题)。[Comment因此,[[功能上]]]不会发生很大变化,但是,如果您打算访问.select_related(..)的所有.user,则会导致(显着)性能提升。

例如,您可以使用以下命令在Comment对象中打印.username.userComment

如果执行此操作[ for comment in Comment.objects.select_related('user'): print(comment.user.username)子句,将导致大量查询。

© www.soinside.com 2019 - 2024. All rights reserved.