如何使用OR运算符创建等效于SQL查询的Django查询集?

sal*_*ane 6 django django-models

在Django中,我知道使用filter多个参数会被转换为SQL AND子句.来自Django书:

您可以将多个参数传递给filter()以进一步缩小范围:

>>> Publisher.objects.filter(country="U.S.A.", state_province="CA")
[<Publisher: Apress>]
Run Code Online (Sandbox Code Playgroud)

这些多个参数被转换为SQL AND子句.因此,代码段中的示例转换为以下内容:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE country = 'U.S.A.'
AND state_province = 'CA';
Run Code Online (Sandbox Code Playgroud)

如何创建一个转换为SQL OR子句的Django查询集?例如:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE state_province = 'AZ'
OR state_province = 'CA'; 
Run Code Online (Sandbox Code Playgroud)

Mik*_*ott 21

使用django.db.models中提供的Q运算符

IE:

from django.db.models import Q
Publisher.objects.filter(Q(state_province="CA") | Q(state_province="AZ"))
Run Code Online (Sandbox Code Playgroud)

看看这里的文档:http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects