reduce函数中的Q运算符是做什么的?

时间:2017-06-13 06:46:55

标签: python django

我不确定以下代码行是做什么的。我确信它被用于搜索但是在reduce函数中会发生什么。

我也经历了https://docs.djangoproject.com/en/1.7/topics/db/queries/#complex-lookups-with-q 为Q运算符找出类似的例子没找到任何东西。

qgroup = reduce(operator.or_, (Q(**{fieldname + '__icontains': q_search}) for fieldname in fieldnames))
return queryset.filter(qgroup)

下面的问题确实解释了一下 what does this operator means in django `reduce(operator.and_, query_list)`

2 个答案:

答案 0 :(得分:2)

这只会为包含OR的{​​{1}}中的每个fieldname创建一个由fieldnames sql子句分隔的条件的查询。

E.g。

q_search

会制作

fieldnames = ['name', 'text', 'content']

因此,如果字段名中的任何字段包含qgroup = Q(name_icontains=q_search) | Q(text_icontains=q_search) | Q(content_icontains=q_search) . ,那么基本上它会过滤您的查询集。

答案 1 :(得分:0)

它在条件之间实现OR,当简单过滤器只能在条件之间实现AND