我试图获得一个具有模型项目的唯一实例的查询集。当我尝试将多个查询集与&操作符:
projects = (q1_projects & q2_projects & q3_projects)
我得到这个错误:
AssertionError: Cannot combine a unique query and a non-unique query.
被ruddra引用
您可以使用union()来组合不同的查询集,像这样:
q1_projects = Model.objects.filter(...)
q2_projects = Model.objects.filter(...)
q3_projects = Model.objects.filter(...)
projects = q1_projects.union(q2_projects, q3_projects)
将得到与
相同的结果projects = q1_projects & q2_projects & q3_projects
注意:UNION
操作符默认只选择不同的值。若要允许重复值,请使用all=True
参数。
但是如果你想在ForeignKey上设置order_by
,你必须使用select()
我得到了下面相同的错误:
AssertionError: Cannot combine a unique query and a non-unique query.
将带distinct()的查询与不带distinct()
带"|"(位或)的查询组合在一起时,如下所示:
qs1 = Food.objects.distinct().filter(name='Apple') # With "distinct()"
qs2 = Food.objects.filter(name='Orange') # Without "distinct()"
result = qs1 | qs2 # Here
因此,我使用union()而不是"|"(按位或),如下所示,然后错误解决了:
qs1 = Food.objects.distinct().filter(name='Apple')
qs2 = Food.objects.filter(name='Orange')
result = qs1.union(qs2) # Here