• en
  • Language: ru
  • Documentation version: 2.0

4. Как сделать NOT запрос в Django queryset?

../_images/usertable.png

Если вы используете django.contrib.auth, у вас будет таблица под названием auth_user. В ней будут поля username, first_name, last_name и другие.

Допустим, вы хотите получить всех пользователей с id НЕ < 5. Вам нужна операция NOT.

Django предоставляет два варианта.

  • exclude(<condition>)

  • filter(~Q(<condition>))

4.1. Запрос в деталях

Наш SQL-запрос для приведенного выше условия будет выглядеть примерно так:

SELECT id, username, first_name, last_name, email FROM auth_user WHERE NOT id < 5;
../_images/sqluser_notquery.png

Метод 1 с использованием исключения

Метод 2 с использованием метода Q():

>>> from django.db.models import Q
>>> queryset = User.objects.filter(~Q(id__lt=5))
>>> queryst
<QuerySet [<User: Ritesh>, <User: Billy>, <User: Radha>, <User: sohan>, <User: Raghu>, <User: rishab>]>