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

时间:2013-01-29 13:50:32

标签: python django django-models

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

我想过使用float字段并在每次更新时将其分配给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中的日期时间字段,这是1秒的分辨率(I&#39 ; m使用MYSQL 5.5)

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

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

您可以阅读文档here,因为您可以看到“字段”选项旨在准确存档您想要的内容。

您也可以覆盖save方法,因为您可以看到there并根据需要更新last_update字段。

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