Фильтрация пустых или пустых имен в наборе запросов


У меня есть имя, фамилия и псевдоним (по желанию), что мне нужно искать. Итак, мне нужен запрос, чтобы дать мне все имена, которые имеют набор псевдоним.

только если бы я мог сделать:

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

Итак, что же эквивалентно вышесказанному?

5 370

5 ответов:

вы могли бы сделать это:

Name.objects.exclude(alias__isnull=True)

Если вам нужно исключить нулевые значения и пустые строки, предпочтительный способ сделать это-связать вместе такие условия:

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

сцепление этих методов в основном проверяет каждое условие независимо: в приведенном выше примере, мы исключаем строки, где alias либо null или пустая строка, так что вы получите все Name объекты, которые имеют not-null, not-empty

во-первых, документы Django настоятельно рекомендуют не использовать нулевые значения для строковых полей, таких как CharField или TextField. Прочитайте документацию для объяснения:

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

решение: Я думаю,вы также можете объединить методы в QuerySets. Попробуйте это:

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

Это должно дать вам набор, который вы ищете.

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

От Django 1.8,

from django.db.models.functions import Length

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

вы можете просто сделать это:

Name.objects.exclude(alias="")

ответы, кажется, танцуют вокруг этого, но это действительно так просто. filter используется для сопоставления и exclude должен соответствовать всему, кроме того, что он указывает.