본문 바로가기
Python/Python FAQ

Python 장고 쿼리셋 필터링에서 어떻게 같지 않음을 표현하나요?, How do I do a not equal in Django queryset filtering?

by 베타코드 2023. 6. 6.
반응형

질문


장고 모델 QuerySet에서, 비교 값을 위한 __gt__lt가 있지만, __ne!= (같지 않음)이 있나요? 같지 않은 값을 이용하여 필터링을 하고 싶습니다. 예를 들어,

Model:
    bool a;
    int x;

다음과 같이 하고 싶습니다.

results = Model.objects.exclude(a=True, x!=5)

!=는 올바른 구문이 아닙니다. __ne도 시도해보았지만, 작동하지 않았습니다.

결국 다음과 같이 사용했습니다:

results = Model.objects.exclude(a=True, x__lt=5).exclude(a=True, x__gt=5)

답변


이를 위해 Q 객체를 사용할 수 있습니다. 이들은 ~ 연산자로 부정될 수 있으며 일반적인 Python 표현식과 유사하게 결합될 수 있습니다:

from myapp.models import Entry
from django.db.models import Q

Entry.objects.filter(~Q(id=3))

는 ID가 3인 항목을 제외한 모든 항목을 반환합니다:

[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]
반응형

댓글