使用 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_p
和 to_p
标准不起作用。如何解决?
它仅适用于一个标准。如果用户设置(例如)category
和 from_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 )
【讨论】:
谢谢,但如果我设置category
和to_p
这个代码过滤器只能由category
(因为它是第一个)
这是OR
运算符!不是AND
,它按第一个OR
第二个过滤。
我知道。 AND
运算符也不好(仅在设置了每个字段时才过滤)。怎么改?
有点脏,试试看。我对结果不满意,也许有人发布了一种更优雅的方法。
谢谢你,reduce() 没有初始值的空序列以上是关于使用 Q 过滤 django 数据的主要内容,如果未能解决你的问题,请参考以下文章