24

MySQL のように、レコードが変更されるたびにタイムスタンプ フィールドを更新したいと考えています。

DateTimeField(default=datetime.datetime.now())最初に作成されたときにのみ設定されます...

簡単な解決策はありますか?唯一の解決策は、MySQL db で列オプションを手動で設定することですか?

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 に答える