使用或条件过滤django [重复]

Posted

技术标签:

【中文标题】使用或条件过滤django [重复]【英文标题】:Filter in django with or condition [duplicate] 【发布时间】:2017-02-13 17:53:15 【问题描述】:

我想在过滤对象数据时在 django 中使用带有OR 条件的过滤器。

我有一个类的对象,并且我有 3 或 4 个字段,我想在此基础上在 Django 中使用 OR 条件过滤数据。

例如。

Obj = Books.objects.filter(title=title or price=price or description=description or author=author)

我认为这不是执行过滤的正确方法。

在我的 django 过滤器中使用OR 条件的正确方法是什么

【问题讨论】:

【参考方案1】:
from django.db.models import Q

Obj = Books.objects.filter(Q(title=title) | Q(price=price) | Q(description=description) | Q(author=author))

文档:http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects 来源:https://***.com/a/739922/4808939

【讨论】:

如果我通过了所有归档,这将起作用。如果我通过一两个,它会给我以下错误Cannot use None as a query value 在上面的示例代码中,如果我只传递标题,它会给我错误不能使用无作为查询值 @vikrant 你想允许空白查询值吗?如果是这样,您应该在将它们传递给 Q 对象之前对其进行消毒。像这样:title = title or ""。如果它是None,这将用空字符串替换该值。如果你不关心空白值,那么你应该有条件地构建你的 OR'ed together 查询。

以上是关于使用或条件过滤django [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中使用字段名称、条件和值进行动态过滤

Django添加Q过滤器以查询相关对象存在时,条件查询

Django:从查询集中删除过滤条件

Django按条件过滤

如何在 Django ORM 过滤器中使用 OR 条件? [复制]

Django ORM 查询