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")
Вернуться на верх