我正在开发 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_
结果是
operator.or_ <built-in function 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)]