首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在peewee中是否有DateTimeField的自动更新选项,就像MySQL中的TimeStamp?

问在peewee中是否有DateTimeField的自动更新选项,就像MySQL中的TimeStamp?
EN

Stack Overflow用户
提问于 2013-08-29 23:32:59
回答 3查看 8.1K关注 0票数 24

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

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

有简单的解决办法吗?唯一的解决方案是手动设置MySQL db中的列选项吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-30 12:53:44

您可以重写模型类上的save方法。

代码语言:javascript
复制
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)
票数 38
EN

Stack Overflow用户

发布于 2017-08-11 17:38:07

只需在MySQL中使用时间戳类型即可。每当行被更新时,此字段将自我更新。

在model中

代码语言:javascript
复制
last_updated = peewee.TimestampField()
票数 4
EN

Stack Overflow用户

发布于 2018-12-26 07:49:03

您还可以像coleifer一样将update方法重写为provide.Just:

代码语言:javascript
复制
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方法上做同样的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18522600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档