给出以下代码:
progresses = Progress.objects.filter(customer=request.user).select_related()
if id is not None
progress = progresses.get(pk=id)
else:
progress = progresses[0]
我是否需要将select_related()添加到第二个查询,例如progress = progresses.filter(pk=id).select_related()
?
答案 0 :(得分:1)
不,您的progress
queryset对象已经包含在底层sql中的外键关系。它正在创建一个带连接的选择查询。进一步过滤不会删除连接。
docs中有一个示例可以进一步处理包含select_related
的查询(但不使用filter
)。
答案 1 :(得分:0)
filter()和select_related()链接的顺序并不重要。 这些查询集是等效的:
<DirectoryRef Id="INSTALLDIR"> <Component Guid="..." Id="shortcuts_INSTALLDIR"> <RegistryKey ForceDeleteOnUninstall="yes" Id="shortcuts_reg_INSTALLDIR" Key="Software\MyCompany\MyProduct" Root="HKCU"> <RegistryValue KeyPath="yes" Name="shortcut_INSTALLDIR" Type="string" Value=""/> </RegistryKey> <Shortcut Arguments="my args " Description="my description" Id="InstallDir_my_name" Name="my name" Target="[INSTALLDIR]mydir\my.exe" WorkingDirectory="INSTALLDIR"/> </Component> </DirectoryRef>
来自官方Django文档:https://docs.djangoproject.com/en/1.9/ref/models/querysets/