【问题标题】:Django Rest : AssertionError: Cannot combine a unique query with a non-unique queryDjango Rest:AssertionError:无法将唯一查询与非唯一查询组合
【发布时间】:2021-05-01 03:22:44
【问题描述】:
我正在尝试获取具有模型项目的唯一实例的查询集。当我尝试将多个查询集与 & 运算符类似
projects = (q1_projects & q2_projects & q3_projects)
我收到此错误
AssertionError:无法将唯一查询与非唯一查询组合。
【问题讨论】:
标签:
python-3.x
django
django-rest-framework
operators
django-queryset
【解决方案1】:
As quoted by 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()