Я сталкиваюсь с очень странной ситуацией при выполнении запроса к базе данных из Django. У меня есть модель, chat
, которая имеет поле с именем expired
, которое может быть null
. Цель состоит в том, чтобы отфильтровать все элементы из базы данных чата, для которых истек срок действия, не равный None. Выполнение следующего быстрого теста:
for chat in Chat.objects.all():
print(chat.expired is None)
дает мне:
True
True
True
True
True
False
Таким образом, существуют объекты Chat, поля с истекшим сроком действия не являются ни одним. Но при фильтрации:
print(Chat.objects.filter(expired__isnull=False))
дает мне:
<QuerySet [<Chat: 1, type: G>, <Chat: 2, type: G>, <Chat: 3, type: G>, <Chat: 4, type: G>, <Chat: 5, type: G>, <Chat: 6, type: P>]>
, а следующее:
print(Chat.objects.filter(expired__isnull=True))
дает:
<QuerySet []>
Оба вывода запроса не могут быть правильными, поскольку в первом тесте мы можем видеть, что существует 6 объектов Chat, не все с полями expired, установленными в None, но первый запрос дает шесть элементов. Второй получает ноль, хотя есть элементы с полями с истекшим сроком для None. В чем проблема?
Заранее спасибо!
Редактировать
Модель:
class Chat(models.Model):
TYPE_CHOICES = [
('P', 'private'),
('G', 'group'),
]
name = models.CharField(max_length=100, default="private")
type = models.CharField(max_length=2, choices=TYPE_CHOICES, default='P')
image = models.ImageField(null=True, blank=True)
expired = models.DateTimeField(null=True, blank=True)