我不确定以下代码行是做什么的。我确信它被用于搜索但是在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)`
答案 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