0

我想要某种时间戳来更新模型。问题是 mysql 时间戳只有 1 秒的分辨率,所以如果我将 DateTime 与 auto_add_now 一起使用,这对我来说还不够好。

我想过使用浮点字段并在每次更新时将其分配给 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())

这种保存浮动和订单的方法有什么问题吗?

澄清一下,我知道带有 auto_now=True 的 DateTimeField 选项,问题是这给了我 1 秒的分辨率,因为它映射到 MYSQL 中的日期时间字段,即 1 秒的分辨率(我使用的是 MYSQL 5.5)

4

2 回答 2

3

我认为您可以使用DateField.auto_now,并且每次保存对象时都会更新该字段。例如last_update = models.DateTimeField(auto_now = True).

您可以在此处阅读文档,因为您可以看到 Field 选项旨在准确归档您想要的内容。

您也可以覆盖该save方法,如您所见并根据需要更新该last_update字段。

我个人推荐第一种方法,因为它很简单,还有第三种方法使用信号,但我想这会让人感到困惑。

于 2013-01-29T14:15:53.787 回答
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()
于 2013-01-29T14:05:52.207 回答