2016-09-05 2 views
1

일부 개체와 일치 시키려면이 작업을 수행해야합니다. 이것이 최선의 방법입니까? 더 빠른 방법으로 가능합니까? 그냥 Q 개체를 사용하여, 해당 조건 중 하나를 사용하려면Django Queryset

if User.objects.filter(first_name=name, age=age).exists(): 
    user = User.objects.filter(first_name=name, age=age) 
    function_x(user) 
elif User.objects.filter(full_name__icontains=name, age=age).exists(): 
    user = User.objects.filter(full_name__icontains=name, age=age) 
    function_x(user) 
+1

가능한 [Django Filters - or?] (http://stackoverflow.com/questions/739776/django-filters-or) – Sayse

답변

2

, 그것은 당신이 당신의 쿼리에서 논리 or 연산자를 사용할 수 있습니다. 이 경우에 |

from django.db.models import Q 

User.objects.filter(Q(first_name=name) | 
        Q(full_name__icontains=name), 
        age=age) 

or, and 수단이 너무 세 조건 모두에 필요하다.

1

주어진 변수 이름을 감안할 때 위의 쿼리에서 단일 사용자를 반환 할 것으로 예상됩니다. 따라서 .first()을 사용하여 하나 이상의 데이터베이스를 제거 할 수 있습니다.

.first()은 기본적으로 쿼리 세트와 일치하는 첫 번째 오브젝트를 반환하거나,없는 경우 None을 반환합니다. 이렇게하면 .exists()을 수행 할 필요가 없습니다.

user = User.objects.filter(Q(first_name=name) | Q(full_name__icontains=name), age=age).first()