Django Querset Aggregate на boolean Or
В документации Django queryset выполняется следующая агрегатная операция:
Book.objects.all().aggregate(Avg('price'))
Мне интересно, есть ли способ сделать что-то подобное, но с операцией or. Вместо того, чтобы брать среднее значение по полю с числами, можно было бы взять или из всех булевых значений для данного атрибута
Ну, вы могли бы подумать о логике вашего оператора. Вы хотите иметь оператор OR на столбце кверисета. Это означает, что ваш "оператор" будет возвращать True, если в любой из строк этот столбец равен True, и False в другом случае (False, если все они False).
Это можно легко реализовать следующим образом:
test_bool = bool(MyModel.objects.filter(my_bool_col=True))
Это происходит потому, что пустой кверисет оценивается как False, в любом случае как True.
Это эквивалентно any() в Python.
Чтобы сделать то же самое с AND, вы можете сделать противоположное: если любое из них ложно, то все условие ложно, так:
test_bool = not bool(MyModel.objects.filter(my_bool_col=False))
Я бы использовал для этого следующий фрагмент.
bestseller_found = Book.objects.filter(is_bestseller=True).exists()
Если вам нужна более сложная логика, вы можете использовать для этого функции Django, например,
unofficial_book_found = Book.objects.filter(isbn__isnull=True).exists()