Почему Django Запрос для двух равенств DateTimeFields не работает? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть модель:

class Host(models.Model):
    create_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

Я хотел бы отфильтровать все объекты, которые имеют create_date.date () == update_date.date (), поэтому я использую этот Django Запрос:

Host.objects.filter(create_date__date=F("update_date__date")).count()

Предполагается, что в моей базе данных есть хосты с create_date.date () == update_date.date (), поэтому я ожидаю возвращаемое значение для count()> 0; однако в результате я получаю 0.

Тем временем, если я использую этот запрос:

Host.objects.filter(create_date__date__lt=F("update_date__date")).count()

, я получу ожидаемый результат.

В дополнение к этому, У меня есть

a = Host.objects.filter(create_date__date__lt=F("update_date__date")).count()

b = Host.objects.filter(create_date__date__lte=F("update_date__date")).count()

a == b # True

Из вышеприведенного a==b # True, я думаю, что e в lte не вступает в силу, что означает, что нет никаких случаев, когда мои две даты совпадают, но есть в моем сценарии.

Вопрос : Почему я не могу сделать сравнение равенства для Django запроса на DateTimeField?

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете попробовать операцию равенства, используя ограничение набора запросов (объекты Q)

Host.objects.filter(Q(create_date__date=F("update_date__date"))).count()

Это должно выбрать все экземпляры, для которых эта дата равна.

Другое работоспособное решение - использовать ограничения gt и lt для проверки их равенства, когда они оба не true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...