我有一段代码,用来抓取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