在Django模型中保存time.time()

0 投票
2 回答
5867 浏览
提问于 2025-04-17 14:03

我想给模型更新加个时间戳。问题是,MySQL的时间戳精度只有1秒,所以如果我用自动添加当前时间的DateTime,这对我来说不够精确。

我考虑使用浮点数字段,每次更新时把它设置为time.time()。这是一个我用QuerySet.update()进行更新的模型。

model MyModel:
  last_update = models.FloatField(default=time.time)

然后我会在每次保存之前更新last_update(我所有的调用都通过一个中心位置,所以我可以在创建时明确地做这个),比如说:

m = MyModel(..,last_update=time.time())

或者当我进行批量更新时,

m = MyModel.objects.filter(....).update(last_update_time=time.time())

这种保存浮点数并按它排序的方法有没有什么问题?

为了澄清一下,我知道可以用DateTimeField选项设置auto_now=True,但问题是这给我的精度还是1秒,因为它映射到MySQL中的日期时间字段,而MySQL的精度是1秒(我用的是MySQL 5.5)。

2 个回答

1
 from datetime import datetime

 class Model(models.Model):
    date_created = models.DateTimeField()
    date_modified = models.DateTimeField()

 def save(self):
    if self.date_created == None:
       self.date_created = datetime.now()
    self.date_modified = datetime.now()
    super(Model, self).save()

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

3

我觉得你可以使用 DateField.auto_now,这样每次保存这个对象的时候,字段都会自动更新。例如,你可以写 last_update = models.DateTimeField(auto_now = True)

你可以在文档中查看详细信息,这里有说明,这个字段选项正好能实现你想要的效果。

另外,你也可以重写 save 方法,像在那里看到的那样,按照你的需求更新 last_update 字段。

我个人推荐第一种方法,因为它比较简单。还有第三种方法是使用信号,但我觉得那可能会让人很困惑。

撰写回答