我在django中有一个注释模型,其中包含对User模型的外键引用,我正在尝试查找(具有特定帖子ID的注释),然后加入/获取注释作者的用户数据。这就是我在做的
result = Comment.objects.filter(post=post).select_related('user').order_by('-created_at')
返回结果时,得到的对象与添加select_related()
函数之前得到的对象完全相同。我在这里想念什么吗?
.select_related(..)
[Django-doc]函数在查询中进行JOIN,因此将使用查询来加载相关.select_related(..)
对象的数据。如果您不使用.user
,则访问.select_related(..)
的.user
将导致额外的查询。因此,如果您需要加载NPost
s的所有用户,则将进行N + 1个查询(这是著名的N + 1问题)。[Comment
因此,[[功能上]]]不会发生很大变化,但是,如果您打算访问.select_related(..)
的所有.user
,则会导致(显着)性能提升。
例如,您可以使用以下命令在Comment
对象中打印.username
的.user
:Comment
如果执行此操作[ for comment in Comment.objects.select_related('user'):
print(comment.user.username)
子句,将导致大量查询。