Django Rest : AssertionError: Cannot combine a unique query



我试图获得一个具有模型项目的唯一实例的查询集。当我尝试将多个查询集与&操作符:

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

相关内容

  • 没有找到相关文章

最新更新