문제

Django에서 필터와 제외 사이에 차이가 있습니까? 만약 내가 가지고 있다면

self.get_query_set().filter(modelField=x)

그리고 다른 기준을 추가하고 싶습니다. 두 줄의 코드를 따르는 것 사이에 의미있는 차이가 있습니까?

self.get_query_set().filter(user__isnull=False, modelField=x)

self.get_query_set().filter(modelField=x).exclude(user__isnull=True)

더 나은 연습으로 간주됩니까, 아니면 기능과 성능 모두에서 동일합니까?

도움이 되었습니까?

해결책

둘 다 게으르게 평가되므로 동등하게 수행 할 것으로 기대합니다. SQL은 다르지만 실제 구별은 없습니다.

다른 팁

일반적으로 제외는 필터와 반대입니다. 이 경우 두 예제 모두 동일하게 작동합니다.

여기:

self.get_query_set().filter(user__isnull=False, modelField=x)

필드 사용자가 NULL이 아닌 항목을 선택하고 MODELFIELD에 값 X가 있습니다.

이 경우 :

self.get_query_set().filter(modelField=x).exclude(user__isnull=True)

먼저 modelfield에 value x (value x in null 및 사용자 모두 null이 아님)가있는 항목을 선택하면 Field 사용자 null이있는 항목을 제외합니다.

이 경우 첫 번째 옵션을 더 잘 사용하는 것이 더 깨끗해 보입니다. 그러나 둘 다 동일하게 작동합니다.

그것은 당신이 달성하고자하는 것에 달려 있습니다. 부울 값을 사용하면 쉽게 전환 할 수 있습니다 .exclude() 그리고 .filter() 그러나 3 월부터 기사를 제외한 모든 기사를 받고 싶다면 예를 들어는 어떻습니까? 쿼리를 다음과 같이 쓸 수 있습니다

Posts.objects.exclude(date__month=3)

와 함께 .filter() (그러나 이것이 실제로 작동하는지 확실하지 않습니다) : :

Posts.objects.filter(date__month__in=[1,2,4,5,6,7,8,9,10,11,12])

또는 a를 사용해야합니다 Q 물체.

기능 이름이 이미 제안한 것처럼 .exclude() 에 사용된다 들어오지 못하게 하다 결과 세트의 데이터 세트. 부울 값의 경우 쉽게이 기능을 반전시키고 사용할 수 있습니다. .filter() 대신, 그러나 다른 값의 경우 더 까다로울 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top