首页 > 解决方案 > Django Rest:AssertionError:无法将唯一查询与非唯一查询组合

问题描述

我正在尝试获取具有模型项目唯一实例的查询集。当我尝试将多个查询集与 & 运算符结合起来时

projects = (q1_projects & q2_projects & q3_projects)

我收到这个错误

AssertionError:无法将唯一查询与非唯一查询组合。

标签: python-3.xdjangodjango-rest-frameworkoperatorsdjango-queryset

解决方案


正如 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参数。

但是如果你想order_by在 ForeignKey 上,你必须使用select()


推荐阅读