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

Posted

技术标签:

【中文标题】Django Rest:AssertionError:无法将唯一查询与非唯一查询组合【英文标题】:Django Rest : AssertionError: Cannot combine a unique query with a non-unique query 【发布时间】:2021-05-01 03:22:44 【问题描述】:

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

projects = (q1_projects & q2_projects & q3_projects)

我收到此错误

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

【问题讨论】:

您会指定确切的查询吗? 试试这个docs.djangoproject.com/en/3.1/topics/db/queries/… 【参考方案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()

【讨论】:

以上是关于Django Rest:AssertionError:无法将唯一查询与非唯一查询组合的主要内容,如果未能解决你的问题,请参考以下文章

怎么安装django rest framework

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

django rest framework中文介绍

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers