Я хочу иметь возможность перечислять элементы, которые были добавлены пользователем (они указаны как создатель) или элемент был утвержден.
Поэтому мне нужно выбрать:
item.creator = owner or item.moderated = False
Как бы я сделал это в Джанго? (желательно с фильтром или набором запросов).
for f in filters: Item.objects.filter(Q(creator=f1) | Q(creator=f2) | ...)
reduce(lambda q, f: q | Q(creator=f), filters, Q())
создания большого объекта Q.Item.objects.filter(creator__in=creators)
, например.|
берется оператор OR, это на самом деле оператор объединения множеств. Это также используется (не здесь) как побитовое ИЛИ: stackoverflow.com/questions/5988665/pipe-character-in-pythonВы можете использовать | оператор для объединения наборов запросов напрямую, без необходимости Q объектов:
(редактировать - я изначально не был уверен, вызвал ли это дополнительный запрос, но @spookylukey указал, что ленивая оценка набора запросов позаботится об этом)
источник
Стоит отметить, что можно добавить выражения Q.
Например:
Это заканчивается запросом вроде:
Таким образом, нет необходимости иметь дело с или операторами, сокращать и т. Д.
источник
query |= Q(email='mark@test.com')
?Вы хотите сделать фильтр динамическим, тогда вы должны использовать лямбда, как
reduce(lambda x, y: x | y, [Q(brand=item) for item in brands])
эквивалентноисточник
from functools import reduce
заранее.operator.or_
вместоlambda x, y: x | y
?Похож на более старый ответ, но немного проще, без лямбды:
Для фильтрации этих двух условий используется
OR
:Чтобы получить тот же результат программно:
(здесь для удобства разбиты две строки)
operator
находится в стандартной библиотеке:import operator
от docstring:
Для Python3 он
reduce
больше не является встроенным, но все еще находится в стандартной библиотеке:from functools import reduce
PS
Не забудьте убедиться, что
list_of_Q
он не пустой -reduce()
он захлебнется пустым списком, для этого нужен хотя бы один элемент.источник
Это может быть полезно https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships
В основном это звучит как они действуют как
источник