Вы можете сделать это:
Name.objects.exclude(alias__isnull=True)
Если вам необходимо исключить пустые значения и пустых строк, предпочтительный способ сделать это - объединить в единое целое такие условия:
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
Объединение этих методов в одно целое проверяет каждое условие независимо: в приведенном выше примере мы исключаем строки, в которых alias
равно нулю или пустой строке, поэтому вы получаете все Name
объекты, которые не пустое, не пустое 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)
В качестве альтернативы, если ваша логика более сложна, вы можете использовать объекты Q Джанго :
from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
Для получения дополнительной информации см. эту страницу и эту страницу в документации Django.
В качестве отступления: мои примеры SQL - всего лишь аналогия - фактический сгенерированный код SQL, вероятно, будет выглядеть по-другому. Вы получите более глубокое понимание того, как работают запросы Django, фактически посмотрев SQL, который они генерируют.