2009-05-05 1 views
6

Trong Django, tôi biết sử dụng filter với nhiều đối số được dịch sang các mệnh đề SQL AND. Từ Sách Django:Làm cách nào để tạo bộ truy vấn Django tương đương với truy vấn SQL bằng toán tử OR?

Bạn có thể vượt qua nhiều đối số vào lọc() để thu hẹp điều thêm:

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

Những nhiều tranh cãi được dịch sang SQL VÀ khoản. Như vậy, ví dụ trong đoạn mã chuyển thành như sau:

SELECT id, name, address, city, state_province, country, website 
FROM books_publisher 
WHERE country = 'U.S.A.' 
AND state_province = 'CA'; 

Làm thế nào để tạo ra một queryset Django đó được dịch sang SQL OR khoản? Ví dụ:

SELECT id, name, address, city, state_province, country, website 
FROM books_publisher 
WHERE state_province = 'AZ' 
OR state_province = 'CA'; 

Trả lời

21

sử dụng toán tử Q sẵn trong django.db.models

IE:

from django.db.models import Q 
Publisher.objects.filter(Q(state_province="CA") | Q(state_province="AZ")) 

Có một cái nhìn tại các tài liệu ở đây: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

+0

Tuyệt vời! Đây là những gì tôi đang tìm kiếm. Tôi nghĩ tôi đã đọc phần tài liệu đó, nhưng hôm nay tôi không tìm thấy nó. Cảm ơn bạn. – saltycrane

+0

Đừng lo lắng, đã sử dụng nó rất nhiều lần để nó xuất hiện ngay trong đầu tôi. :) –