Django按时间过滤时返回过滤器外部的项



我有一段代码,用来抓取24小时前的条目

yesterday = datetime.now() - timedelta(days=1)
items = get_model(name=p).objects.filter(tagid=tag.id, t_stamp__gt=yesterday).order_by('t_stamp')
for i in items:
print(f'{i.t_stamp}  - {i.t_stamp > yesterday}')
print(yesterday)

然而,由于某种原因,它返回了2项,而它应该返回0。

上面的print语句的结果:

2023-04-06 13:12:54.540000  - False
2023-04-06 14:12:46.976000  - False
2023-04-10 10:06:27.526066

可以看到,时间戳不大于yesterday,那么为什么要返回它呢?


编辑

经过进一步的故障排除后,问题是由于t_stamp是将时间戳转换为datetime对象的自定义字段,因此我需要重写get_prep_value()以将其正确转换回int。

经过进一步的故障排除后,问题是由于t_stamp是一个将时间戳转换为datetime对象的自定义字段,因此我需要重写get_prep_value()以正确地将其转换回int。

class TimestampField(models.Field):
"""
Casts BigIntField to a python datetime object
"""
def from_db_value(self, value, expression, connection):
return datetime.fromtimestamp(value / 1000)
def to_python(self, value):
if isinstance(value, datetime):
return value
return datetime.fromtimestamp(value / 1000)
def get_prep_value(self, value):
if isinstance(value, datetime):
return int(value.timestamp() * 1000)
return value

最新更新