반응형
질문
장고 모델 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>, ...]
반응형
댓글