Часто при работе с Django ORM возникает необходимость отфильтровать набор данных по определенным критериям. Django предоставляет множество полезных операторов для фильтрации, таких как __gt
, __lt
, __exact
и многих других. Однако может возникнуть вопрос: как же сделать фильтрацию, исключающую определенное значение?
В привычном Python коде это можно сделать с помощью оператора !=
, но в случае с Django ORM дело обстоит иначе. Предположим, имеется следующая модель:
class Model: bool_field = models.BooleanField() int_field = models.IntegerField()
И есть желание отфильтровать все объекты модели, где bool_field
равно True
, но int_field
не равно 5. В некоторых языках программирования для этого используется оператор !=
или <>
, но в Django ORM такой оператор отсутствует.
Вместо этого Django ORM предлагает метод exclude()
, который исключает из набора данных те объекты, которые соответствуют указанным критериям. Вернёмся к нашему примеру и реализуем это:
results = Model.objects.exclude(bool_field=True, int_field=5)
Данный запрос вернет все объекты модели, где bool_field
равно True
, но int_field
не равно 5. Таким образом, метод exclude()
выполняет функцию оператора не равно.
Однако стоит отметить, что метод exclude()
исключает все записи, которые соответствуют заданным критериям. Поэтому, если необходимо исключить записи только по одному полю, лучше использовать два отдельных вызова метода exclude()
:
results = Model.objects.exclude(bool_field=True).exclude(int_field=5)
В этом случае запрос вернет все объекты модели, где bool_field
не равно True
и int_field
не равно 5.
Добавить комментарий