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

Я не знаю, что является лучшим инструментом анализа зависимостей. Вы можете заглянуть в modulefinder - это модуль в стандартной библиотеке, который определяет набор модулей, импортированных скриптом.

Конечно, с python у вас проблемы с условным импортом и даже потенциальными вызовами скриптов __import__, поэтому он может не найти все. Вот почему инструменты, такие как py2exe, нуждаются в особой помощи, чтобы справляться с такими пакетами, как PIL.

426
задан un33k 23 November 2013 в 23:05
поделиться

2 ответа

Вы можете сделать это:

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, который они генерируют.

809
ответ дан 22 November 2019 в 23:09
поделиться

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

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

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

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

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

37
ответ дан 22 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: