Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
17 Май 2023
2 мин
834

Не равно в Django queryset фильтрации

Часто при работе с Django ORM возникает необходимость отфильтровать набор данных по определенным критериям. Django предоставляет множество полезных операторов

Часто при работе с 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.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий