尝试使用 operator.or_ 减少 Django Q 对象似乎会导致使用 'AND' 减少
Posted
技术标签:
【中文标题】尝试使用 operator.or_ 减少 Django Q 对象似乎会导致使用 \'AND\' 减少【英文标题】:Trying to reduce Django Q objects with operator.or_ seems to result in reduction with 'AND'尝试使用 operator.or_ 减少 Django Q 对象似乎会导致使用 'AND' 减少 【发布时间】: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”的对象。
【参考方案1】:
q_objects[type] = [Q(**q_dict)]
没有。您需要分别处理每个元素。
q_objects[type] = [Q(**k: v) for (k, v) in q_dict.iteritems()]
【讨论】:
以上是关于尝试使用 operator.or_ 减少 Django Q 对象似乎会导致使用 'AND' 减少的主要内容,如果未能解决你的问题,请参考以下文章
delphi7报错: Missing operator or semicolon
Delphi中做加法,总显示错误missing operator or semicolon