尝试用operator.or_减少Django Q对象似乎结果为'AND'的减少
operator.or_ <built-in function or_>
我正在用Python/Django开发一个应用程序。我想通过使用Python的operator.or_函数来过滤一组Q对象,减少这个列表的大小。可惜的是,结果是一个用AND
连接的列表,而不是用operator.or_
连接的。
问题出现在以下代码中:
print 'operator.or_', operator.or_
filter = reduce(operator.or_, q_objects[key])
print key, '->', filter
这段代码的结果是
print 'operator.or_', operator.or_
看起来是成功的。
但是,
filter = reduce(operator.or_, q_objects[key])
print key, '->', filter
结果是(加了格式化)
some_key -> (
AND:
('some_field__icontains', u'search string 1'),
('other_field__icontains', u'search string 2')
)
如你所见,结果是用AND
连接的,而不是OR
。有没有人能看出我哪里做错了?
关于q_objects[key]
,它是这样创建的:
q_dict = {'some_field__icontains': u'search string 1', 'other_field__icontains': u'search string 2'}
q_objects[key] = [Q(**q_dict)]
1 个回答
2
q_objects[type] = [Q(**q_dict)]
不行。你需要单独处理每个元素。
q_objects[type] = [Q(**{k: v}) for (k, v) in q_dict.iteritems()]