Я не знаю, что является лучшим инструментом анализа зависимостей. Вы можете заглянуть в modulefinder
- это модуль в стандартной библиотеке, который определяет набор модулей, импортированных скриптом.
Конечно, с python у вас проблемы с условным импортом и даже потенциальными вызовами скриптов __import__
, поэтому он может не найти все. Вот почему инструменты, такие как py2exe, нуждаются в особой помощи, чтобы справляться с такими пакетами, как PIL.
Вы можете сделать это:
Name.objects.exclude(alias__isnull=True)
Если вам нужно исключить пустые значения и пустых строк, предпочтительный способ сделать это - связать условия следующим образом:
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
Объединение этих методов в цепочку в основном проверяет каждое условие независимо: в приведенном выше примере мы исключаем строки, в которых псевдоним
либо null , либо пустая строка, поэтому вы получаете все Назовите объекты
, у которых есть непустое или непустое поле псевдонима
. Сгенерированный 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-объекты Django :
from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
Для получения дополнительной информации см. на этой странице и эта страница в документации Django.
В стороне: мои примеры SQL - просто аналогия - фактически сгенерированный код SQL, вероятно, будет выглядеть иначе. Вы получите более глубокое понимание того, как работают запросы Django, фактически посмотрев на SQL, который они генерируют.
Во-первых, в документации Django настоятельно рекомендуется не использовать значения NULL для строковых полей, таких как CharField или TextField. Прочтите документацию для объяснения:
https://docs.djangoproject.com/en/dev/ref/models/fields/#null
Решение: Я думаю, вы также можете объединить методы в QuerySets. Попробуйте следующее:
Name.objects.exclude(alias__isnull=True).exclude(alias="")
Это должно дать вам набор, который вы ищете.