Django __ в поиске не ищет значения None - PullRequest
0 голосов
/ 25 февраля 2020

Предположим, у меня есть модель с именем Subject, и я хочу отфильтровать значения на основе списка значений. Рассмотрим приведенный ниже список.

["John", "Brad", None]

Когда я пытаюсь отфильтровать результат, используя поиск __in, он не ищет значения None. Например,

Subject.objects.filter(user__in=["John", "Brad", None])

Это обеспечит набор запросов для Джона и Брэда, но не None. Что мне здесь не хватает? Может кто-нибудь, пожалуйста, помогите мне

Ответы [ 4 ]

2 голосов
/ 25 февраля 2020

Вы можете использовать Q objects для OR, AND and NOT операций. Объекты Q предоставляют вам полный контроль над предложением where запроса.

Ваш набор запросов будет выглядеть примерно так:

from django.db.models import Q
Subject.objects.filter(Q(user=None) | Q(user__in=["John", "Brad"]))

Вы можете комбинировать объекты Q более сложными способами для создания сложных запросов. .

2 голосов
/ 25 февраля 2020

Попробуйте выполнить фильтрацию следующим образом

from django.db.models import Q

Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
2 голосов
/ 25 февраля 2020

Использование объектов Q лучше подходит для этого:

Subject.objects.filter(Q(user__in=["John", "Brad"]) | Q(user__isnull=True))
2 голосов
/ 25 февраля 2020

NULL с в БД (None в django) не являются регулярными значениями, поэтому они требуют другого подхода:

Subject.objects.filter(Q(user__in=["John", "Brad", ]) | Q(user__isnull=True,))
...