Django возвращает разные результаты по одним и тем же фильтрам
У меня есть модель, по которой я выполняю запрос daterange. По коммерческим причинам я аннотирую поле в результатах, которое представляет часовой пояс CST (по умолчанию данные хранятся в UTC).
Приведенный ниже запрос возвращает пустой набор запросов, даже если в нем есть записи по указанному ниже диапазону дат.
MyModel.objects.annotate(cst_created_at=ExpressionWrapper(F('created_at')-timezone.timedelta(hours=6, minutes=0), output_field=DateTimeField())).filter(cst_created_at__date__range=["2022-09-01", "2022-09-01"])
Если я получаю значения cst_created_at (которое я аннотировал) и created_at, которое является полем auto_now_add=True
, они оба одинаковы.
result = MyModel.objects.annotate(cst_created_at=ExpressionWrapper(F(field)-timezone.timedelta(hours=6, minutes=0), output_field=DateTimeField())).first()
cst = result.cst_created_at
ca = result.created_at
print(cst)
>>>datetime.datetime(2022, 9, 1, 0, 51, 2, 310752, tzinfo=<UTC>)
print(ca)
>>>datetime.datetime(2022, 9, 1, 6, 51, 2, 310752, tzinfo=<UTC>)
cst.date() == ca.date()
>>>True
В то же время, если я запрошу cst_created_at со вчерашней датой (2022-08-31), он вернет объекты, созданные 2022-09-01. Также, если я запрашиваю created_at__date для 2022-09-01, это тоже работает.
Я хочу знать, если обе даты одинаковы, почему запрос не работает правильно?