문제

가 first_name,last_name&별명(옵션)내가 필요합니다.그래서 저는 필요한 쿼리를 내게 모든 이름이 있는 별칭을 설정합니다.

는 경우에만 할 수 있습니다.

Name.objects.filter(alias!="")

그래서 무엇입니까?

도움이 되었습니까?

해결책

당신이 이렇게 할 수 있다:

Name.objects.exclude(alias__isnull=True)

필요하신 경우에는 null 값을 제외 빈 문자열이 선호하는 방법은 그래서를 함께 체인 조건을 이렇게:

Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')

체인이 이러한 방법은 함께 기본적으로 검사를 각각 상태를 독립적으로:위의 예에서,우리는 제외 행 alias 이거나 null 빈 문자열로,그래서 당신은 모든 Name 체가 null 이 아닌지,빈 alias 다.생성 SQL 다음과 같습니다.

SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""

를 전달할 수도 있습니다 여러에 인수를 하나의 전화 exclude, 는 것을 보장하는 것만을 만족하는 개체 조건을 얻을 제외:

Name.objects.exclude(some_field=True, other_field=True)

여기에서 행하는 some_field other_field 는 사실을 얻지 않고,그래서 우리는 모든 행 모두 필드는 사실이 아닙니다.생성된 SQL 코드 보이는 것이 작은 다음과 같다:

SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)

는 경우 또는 당신의 논리보다 더 복잡는 사용할 수 있습니다 Django 의 Q 체:

from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

더 많은 정보에 대한 참조 이 페이지이 페이지 Django docs.

로 옆:내 SQL 예제는 단지 비유--실제 생성 SQL 코드는 아마 다른 모습.당신은 깊은 이해의 방법 Django 쿼리 작업에 의해 실제적으로 찾고 있에서 SQL 들을 생성합니다.

다른 팁

Name.objects.filter(alias__gt='',alias__isnull=False)

첫째,Django 문서 강력하게 추천을 사용하지 않는 NULL 값을 문자열에 기반과 같은 분야 CharField 또는 TextField.위해 설명서를 읽어 보시기 바랍 설명:

https://docs.djangoproject.com/en/dev/ref/models/fields/#null

솔루션:할 수 있도 함께 체인 방법에 QuerySets,나는 생각한다.이것을 보십시오:

Name.objects.exclude(alias__isnull=True).exclude(alias="")

해 당신에게 당신을 설정합니다.

에서 Django1.8,

from django.db.models.functions import Length

Name.objects.annotate(alias_length=Length('alias')).filter(alias_length__gt=0)

일반적인 실수를 피하기 위해 사용하는 경우 exclude,기억하십시오:

추가 조건으로 는 제외() 블록처럼 filter.을 제외 여러 조건이 사용해야 합니다에 여러 제외()

잘못된:

사용자.체입니다.필터를(이메일='example@example.com').제외(프로필__닉_name=", 프로필__avt=")

:

User.objects.filter(email='example@example.com').exclude(profile__nick_name=").exclude(profile__avt=")

이것은 다른 간단한 방법으로 그것을 할 수 있습니다.

Name.objects.exclude(alias=None)

단순히 할 수 있다:

Name.objects.exclude(alias="").exclude(alias=None)

그것은 정말 간단합니다. filter 와 일치하는지 확인하기 위해 사용됩고 exclude 일치하는 것이 모두 하지만 그것이 무엇을 합니다.이 평가 SQL 로 NOT alias='' AND alias IS NOT NULL.

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