Я работаю над приложением на Python / Django. Я пытаюсь создать фильтр, уменьшив список объектов Q с помощью функции Python operator.or_.
К сожалению, в результате получается список, который объединяется с 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)]