我正在使用 Django 的内置用户模型,并有一个自定义 Foo 对象,其中包含 User 的外键。我希望选择符合某些约束的所有 User 对象和所有 Foo 对象,如下所示:
SELECT * from auth_user LEFT OUTER JOIN "foo" ON
(auth_user.id = foo.id AND <other criteria here>)
我应该如何在 Django 中完成这个任务?到目前为止我已经尝试过:
User.objects.filter(foo__<criteria>)
但这会生成类似于以下的 SQL:
SELECT * from auth_user LEFT OUTER JOIN "foo" ON
(auth_user.id = foo.id) WHERE <other criteria here>
并且仅返回具有符合条件的 Foo 对象的 User 对象。或者,我可以选择所有 User 对象并为每个对象运行一个查询,但这会大大降低效率。
为了得到一个LEFT OUTER JOIN
你可以走了:
User.objects.select_related('foo').filter(Q(foo__isnull=True) | Q(<other criteria here>))
Django 使用foo__isnull=True
指导它生成一个LEFT OUTER JOIN
。给予foo__isnull=False
生成一个INNER JOIN
就像没有过滤器参数一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)