Django排除查询,我可以传递多个参数吗?

Ris*_*waj 4 python django django-orm django-queryset django-2.2

我有一个查询,我想排除空公司以及特定用户电子邮件。

Demo.objects.all().exclude(company__isnull=True, email="abc@gmail.com")
Run Code Online (Sandbox Code Playgroud)

但似乎上面的排除不适用于多个参数,我的返回查询集中有 email="abc@gmail.com" 。

如果我尝试使用单个参数进行上述查询,它会起作用。但不适用于多个参数。任何人都知道如何在 django except 中传递多个参数?

谢谢

Wil*_*sem 9

你可以这样做,但然后你说排除所有Demo具有company__isnull=True, 和 as 的email 'abc@gmail.com's 。因此,这意味着如果仅满足两个条件之一,则不排除

您可以使用Q对象,例如:

from django.db.models import Q

Demo.objects.exclude(
    Q(company__isnull=True) |
    Q(email='abc@gmail.com')
)
Run Code Online (Sandbox Code Playgroud)

但它可能更具可读性:

Demo.objects.exclude(
    company__isnull=True
).exclude(
    email='abc@gmail.com'
)
Run Code Online (Sandbox Code Playgroud)

company因此,这将排除is的项目NULL email排除is的项目'abc@gmail.com'所以这里我们从至少满足一个条件的那一刻起就排除它。