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

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

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

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

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

5 ответов


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

Name.objects.exclude(alias__isnull=True)

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

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

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


во-первых, документы Django настоятельно рекомендуют не использовать значения NULL для строковых полей, таких как 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 должен соответствовать всему, кроме того, что он указывает.