【发布时间】:2011-12-29 15:34:55
【问题描述】:
我正在使用 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)]
【问题讨论】:
-
q_objects[key]包含什么?只是想知道它是否已经有带有AND的复合对象。因为当我尝试使用两个简单的 Q 对象时,我得到的结果与预期的OR相结合。 -
感谢您的回复。我在底部添加了其他信息。那里似乎没有类似“AND”的对象。