24

我希望每次修改记录时都会更新时间戳字段,就像在 MySQL 中一样。

DateTimeField(default=datetime.datetime.now())只会在第一次创建时设置它...

任何有一个简单的解决方案?唯一的解决方案是在 MySQL db 中手动设置 Column 选项吗?

4

3 回答 3

38

您可以覆盖save模型类上的方法。

class Something(Model):
    created = DateTimeField(default=datetime.datetime.now)
    modified = DateTimeField

    def save(self, *args, **kwargs):
        self.modified = datetime.datetime.now()
        return super(Something, self).save(*args, **kwargs)
于 2013-08-30T12:53:44.030 回答
4

只需在 MySQL 中使用 TIMESTAMP 类型。每当更新行时,此字段将自行更新。

model

last_updated = peewee.TimestampField()
于 2017-08-11T17:38:07.953 回答
0

您也可以重写提供的update方法。就像 coleifer 所做的那样:

class Something(Model):
    created = DateTimeField(default=datetime.datetime.now)
    modified = DateTimeField

    @classmethod
    def update(cls, *args, **kwargs):
        kwargs['modified'] = datetime.datetime.now()
        return super(Something, cls).save(*args, **kwargs)

    def save(self, *args, **kwargs):
        self.modified = datetime.datetime.now()
        return super(Something, self).save(*args, **kwargs)

replace你也可以在方法上做同样的事情

于 2018-12-26T07:49:03.740 回答