排除和操作条件Django

时间:2018-12-31 10:08:39

标签: django django-models django-forms django-views

我想对所有排除查询进行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 :(得分:2)

用逗号分隔所有查询的方式与AND相似,如果要组合多个AND / OR运算,则可以在Django中使用Q对象。

例如

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. 与“超级管理员”匹配,它可能以小写形式存储吗?尝试使用icontains并使用小写的“超级管理员”
  2. 没有以“超级管理员”作为标题,被删除且同时为超级用户的用户?尝试一一查询所有对象,看看是否有交集?

让我知道是否有帮助。

答案 1 :(得分:-1)

您可以尝试使用Q()

from django.db.models import Q

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