使用 Q 过滤 django 数据

Posted

技术标签:

【中文标题】使用 Q 过滤 django 数据【英文标题】:Filter django data using Q 【发布时间】:2013-02-16 03:11:34 【问题描述】:
category = request.GET.get('cat')
from_p = request.GET.get('from')
to_p = request.GET.get('to')

q = Q()
if category:
    q |= Q(category=category)
if from_p:
    q |= Q(price__gt=from_p)
if to_p:
    q |= Q(price__lt=to_p)

s = Sample.objects.filter(q)

www.example.com/?cat=0&from=300&to=600

如果第一个是 category - from_pto_p 标准不起作用。如何解决? 它仅适用于一个标准。如果用户设置(例如)categoryfrom_p 按这些条件搜索,我需要。

【问题讨论】:

【参考方案1】:

已编辑

这里是:

q_cat = Q(category=category) if category else Q()
q_from = Q(price__gt=from_p) if from_p else Q()
q_to = Q(price__lt=to_p) if to_p else Q()

q = q_cat | ( q_from  & q_to )

s = Sample.objects.filter(  q )

【讨论】:

谢谢,但如果我设置categoryto_p 这个代码过滤器只能由category (因为它是第一个) 这是OR 运算符!不是AND,它按第一个OR 第二个过滤。 我知道。 AND 运算符也不好(仅在设置了每个字段时才过滤)。怎么改? 有点脏,试试看。我对结果不满意,也许有人发布了一种更优雅的方法。 谢谢你,reduce() 没有初始值的空序列

以上是关于使用 Q 过滤 django 数据的主要内容,如果未能解决你的问题,请参考以下文章

Django过滤查询和或

使用 F 和 Q 表达式进行 Django 模型过滤

Django,在模型中按函数过滤 Q 对象

Django 过滤器 OR - q 对象性能与 I 性能

Django / GET 表单 / Q 过滤

当多个输入可以为空时,在 Django 中使用 Q 进行过滤