2010-09-26 24 views
9

Trong Django, làm thế nào để bạn truy vấn để nhận được hai giá trị khác nhau, như sau?Truy vấn Django sử dụng điều kiện OR

profile_setting = (pSetting.objects.get(module="my_mod", setting_value=1) or 
        pSetting.objects.get(module="my_mod", setting_value=0)) 

Trả lời

10

Thanh toán django của Q-class:

profile_setting = pSetting.objects.get(Q(module="my_mod"),\ 
        Q(setting_value=1)|Q(setting_value=0)) 

Hơn nữa để cải thiện mã hóa của bạn phong cách, có một cái nhìn tại một số coding guidelines, bạn nên đặt tên cho lớp mô hình của mình là PSetting.

+0

Tôi đồng ý về phong cách - cũng xem xét PEP8 của Python (http://www.python.org/dev/peps/pep-0008/) để biết hướng dẫn về phong cách. – bx2

3

Có một đối tượng Q() cho nhiệm vụ này - nhìn ở đây: Complex Queries with Q() object

Trong ví dụ:

profile_setting = pSetting.objects.get(
    Q(module="my_mod", setting_value=1) | Q(module="my_mod", setting_value=0) 
) 
1
profile_setting = pSetting.objects.get(module="my_mod",setting_value__in=[0,1]) 
4

Bạn có chắc chắn rằng bạn đang chỉ lấy một đối tượng?

Nếu bạn đang cố gắng để lấy một queryset của một loạt các đối tượng, tất cả các bạn cần làm là chuỗi bộ lọc với nhau:

profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=0) 
         .filter(module="my_mod", setting_value__in=1) 

Tuy nhiên, vì tất cả mọi thứ nhưng setting_value là như nhau, bạn có thể chỉ đơn giản là tìm kiếm một danh sách hoặc tuple:

profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=[0,1]) 

(gợi ý alexdb của trên là tốt khi và chỉ khi bạn chắc chắn rằng bạn sẽ nhận được chỉ có một đối tượng như một phản ứng với truy vấn của bạn)

0

Đối với loại truy vấn này, hãy kiểm tra tài liệu này link

và cho vấn đề cụ thể của bạn, bạn có thể chuyển nhiều đối tượng truy vấn (Q) để sử dụng truy vấn | cho điều kiện OR và & cho điều kiện AND trong cả hai hàm get() và filter().

Các vấn đề liên quan