django过滤器中的逻辑操作

Posted

技术标签:

【中文标题】django过滤器中的逻辑操作【英文标题】:Logical operations in django filter 【发布时间】:2018-06-19 13:52:44 【问题描述】:

我需要在哪里获取我的查询集:

(a="a" AND b=None) OR (a=None AND b="b")

我知道 django 中的 Q 对象,但是这种语法不起作用:

cls.objects.filter(models.Q(a="a", b=None) | models.Q(a=None, b="b"))

我绝对确定我的数据库包含预期的对象。但我得到的只是空的查询集。 我想这里的语法有一些问题。但是在哪里呢?excepted rows picture. i need only first one and second one

【问题讨论】:

【参考方案1】:
cls.objects.filter(models.Q(a="a", b='None') | models.Q(a='None' AND b="b"))

试试这个

【讨论】:

cls.objects.filter(models.Q(a="a", b__isnull=True) | models.Q(a__isnull=True, b="b")) 类似结果 - 空查询集 你能告诉我你的数据库的列中有什么吗?您是否要查找所有包含 a 和 b 字符串的内容?? 我有两列名为ab。我需要得到的只是 - 带有字符串的对象等于我的请求参数。我的意思是如果数据库中有a == "a"b == None 所在的行 - 我需要该行。如果a == "aaaa" 我不需要它。 你能显示你想要得到的 2 行吗 excepted rows 复制链接:i.imgur.com/maQi0uU.png

以上是关于django过滤器中的逻辑操作的主要内容,如果未能解决你的问题,请参考以下文章

Django框架模版渲染与过滤器使用

Django4.1_template之变量和过滤器

Django学习系列(二,Models数据操作篇)

Django数据操作

Python / Django 应用程序:带有过滤菜单的酒单。过滤逻辑应该去哪里?前端还是后端?

Django-模板语言和过滤器