Django фильтр с использованием поля DateTimeField, которое может быть null
Я хочу фильтровать объекты таблицы с помощью поля DateTimeField => last_user_action_time
, это поле может быть null, поэтому мне нужно, чтобы случаи, когда оно null, были включены в результат.
Вот что я пробовал:
notification_objects = SinglePushNotification.objects.filter(
last_user_action_time__lte=day_start,
last_user_action_time__isnull=True,
).select_related("customer")
Возвращает пустой querySet, зная, что есть объекты, где null=True
Похоже, вам нужно использовать запрос or, в вашей попытке вы проверяете, что оба условия истинны: поле null и дата меньше начала (невозможный случай).
Попробуйте использовать "или" следующим образом:
from django.db.models import Q
notification_objects = SinglePushNotification.objects.filter(
Q(last_user_action_time__lte=day_start) |
Q(last_user_action_time__isnull=True)
).select_related("customer")
Функция .filter()
объединяет запросы с помощью AND, а не OR - поэтому ваш текущий фильтр ищет last_user_action_time
поля, которые равны day_start
AND isnull=True
. Вы должны использовать объект Django Q() .
# e.g.
.filter(Q(last_user_action_time__lte=day_start) | Q(last_user_action_time__isnull=True))
Хотя метод в других ответах работает, я все же хочу предложить другой способ достижения желаемого.
То есть, вместо того, чтобы проверять, истинно ли любое из условий, можно просто исключить случай, когда ни одно из них не истинно:
notification_objects = SinglePushNotification.objects.exclude(
last_user_action_time__gt=day_start
).select_related("customer")