Исключить и условия эксплуатации Django - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу добавить AND и поместить все запросы на исключение в одну функцию исключения.

context['users'] = User.objects.exclude(userprofile__user_role__role_title='Super Admin').exclude(userprofile__user_is_deleted = True).exclude(is_superuser=True)

Выше у меня есть два исключения, вместо которых я хочу одно

context['users'] = User.objects.exclude(userprofile__user_role__role_title='Super Admin', userprofile__user_is_deleted = True, is_superuser=True)

Но это не работает вмой взгляд

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Разделение всех запросов запятой работает как AND, если вы хотите объединить несколько операций AND / OR, вы можете использовать объекты Q в Django.

например,

from django.db.models import Q

context['users'] = User.objects.exclude((Q(userprofile__user_role__role_title='Super Admin') & Q(is_superuser=True)) | Q(userprofile__user_is_deleted = True))

Причина, по которой этоможет быть не работает для вас, может быть, вы используете неправильный запрос?Возможные причины:

  1. Соответствует 'Super Admin', оно может храниться в нижнем регистре или как-то еще?попробуйте использовать icontains и использовать «super admin» в нижнем регистре
  2. Нет пользователя, который имеет «Super Admin» в качестве заголовка, удален и одновременно является суперпользователем?Попробуйте запросить все объекты один за другим, посмотрите, есть ли пересечение?

Дайте мне знать, помогло ли это.

0 голосов
/ 31 декабря 2018

вы можете попробовать с Q ()

from django.db.models import Q

User.objects.exclude(Q(role_title='Super Admin')| Q(user_is_deleted = False))
...