반응형
django queryset에서 OR 조건을 수행하는 방법은 무엇입니까?
이 SQL 쿼리와 동등한 Django 쿼리를 작성하고 싶습니다.
SELECT * from user where income >= 5000 or income is NULL.
Django 쿼리 세트 필터를 구성하는 방법은 무엇입니까?
User.objects.filter(income__gte=5000, income=0)
AND
필터 이기 때문에 작동하지 않습니다 . OR
개별 쿼리 집합을 통합하기 위해 필터를 원합니다 .
from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income__isnull=True))
때문에 검색어 세트 구현 파이썬 __or__
연산자 ( |
), 또는 노동 조합을, 그냥 작동합니다. 당신이 기대하는 것처럼, |
바이너리 연산자는를 반환 QuerySet
그래서 order_by()
, .distinct()
및 기타의 검색어 필터는 끝에 압정으로 고정 할 수 있습니다.
combined_queryset = User.objects.filter(income__gte=5000) | User.objects.filter(income__isnull=True)
ordered_queryset = combined_queryset.order_by('-income')
2019-06-20 업데이트 : 이제 Django 2.1 QuerySet API 참조 에 완전히 설명되어 있습니다. 더 역사적인 토론은 DjangoProject 티켓 번호 21333 에서 찾을 수 있습니다 .
두 가지 옵션 모두 기존 답변에 이미 언급되어 있습니다.
from django.db.models import Q
q1 = User.objects.filter(Q(income__gte=5000) | Q(income__isnull=True))
과
q2 = User.objects.filter(income__gte=5000) | User.objects.filter(income__isnull=True)
그러나 어느 쪽을 선호해야하는지에 대한 혼란이있는 것 같습니다.
요점은 SQL 수준 에서 동일 하므로 원하는 것을 자유롭게 선택하십시오!
장고 ORM 요리 책은 여기,이에 대한 몇 가지 구체적으로 이야기 관련 부분입니다 :
queryset = User.objects.filter(
first_name__startswith='R'
) | User.objects.filter(
last_name__startswith='D'
)
~으로 이끌다
In [5]: str(queryset.query)
Out[5]: 'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login",
"auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name",
"auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff",
"auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user"
WHERE ("auth_user"."first_name"::text LIKE R% OR "auth_user"."last_name"::text LIKE D%)'
과
qs = User.objects.filter(Q(first_name__startswith='R') | Q(last_name__startswith='D'))
~으로 이끌다
In [9]: str(qs.query)
Out[9]: 'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login",
"auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name",
"auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff",
"auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user"
WHERE ("auth_user"."first_name"::text LIKE R% OR "auth_user"."last_name"::text LIKE D%)'
출처 : django-orm-cookbook
참고 URL : https://stackoverflow.com/questions/6567831/how-to-perform-or-condition-in-django-queryset
반응형
'Programing' 카테고리의 다른 글
Perl 용 대화식 콘솔을 시작하려면 어떻게해야합니까? (0) | 2020.04.04 |
---|---|
jQuery로 키 누르기 이벤트를 트리거하는 확실한 방법 (0) | 2020.04.04 |
문자열이 패턴과 일치하는지 확인 (0) | 2020.04.03 |
Visual Studio Code의 여러 인스턴스를 열려면 어떻게합니까? (0) | 2020.04.03 |
setBackground vs setBackgroundDrawable (Android) (0) | 2020.04.03 |