Django ORM,排除两个值

时间:2014-04-10 09:25:53

标签: django orm

我想在我的排除声明中获得和OR操作。

像:

Select all those records where name is NOT Mason and Status is NOT Unactive

或者

Select all those records where name is NOT Mason and Status is active

试过。

Users.objects.exclude(name="Mason", active=False)

但这不是OR操作,而是AND。如何进行OR操作。

2 个答案:

答案 0 :(得分:2)

为了在OR操作中使用exclude。你必须使用排除两次。

Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3)).exclude(headline='Hello')

或者

User.objects.exclude(name="Mason").exclude(active=False)

参考

Docs

答案 1 :(得分:1)

了解complex lookups with Q objects doc。对于你的情况:

from django.db.models import Q

q1 = Q(name="Mason")
q2 = Q(active=False)

Users.objects.exclude( q1 | q2 )

或者,更多关闭你的SQL

#where name is NOT Mason and Status is NOT Unactive
Users.objects.filter( ~q1 & ~q2 )

#where name is NOT Mason and Status is active
q2 = Q(active=True)
Users.objects.filter( ~q1 & q2 )