2013-08-29 2 views
14

MySQL에서와 같이 레코드가 수정 될 때마다 타임 스탬프 필드를 업데이트하고 싶습니다.MySQL의 TimeStamp와 같은 peewee의 DateTimeField에 대한 자동 업데이트 옵션이 있습니까?

DateTimeField(default=datetime.datetime.now())은 그것을가 생성되는 첫 번째 시간을 설정합니다 ...

어떤 간단한 해결책이? 유일한 해결책은 MySQL 데이터베이스에서 열 옵션을 수동으로 설정하는 것입니까?

답변

25

모델 클래스에서 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) 
+1

업데이트 예를 들어, Something.update (othercolumn = foo는) 이야기 해봐 (ID = 2) .Execute를()에 대한 동일한하는 방법을 알려 주시기 바랍니다. 또는 Model.save()를 대신 사용하도록 코드를 다시 작성해야합니까? 미리 Thx. – chrisinmtown

+1

'.update()'를 호출하면 SQL 측에 타임 스탬프 업데이트 로직을 구현해야 할 수도 있습니다. 'update()'는'save()'를 호출하지 않습니다. – coleifer

+0

Peewee에서 Model 클래스를 재정의 할 수있는 방법이 있습니까? – Jeff

2

그냥 MySQL의에서 TIMESTAMP 유형을 사용합니다. 이 필드는 행이 갱신 될 때마다 자동으로 갱신됩니다. model에서

:

last_updated = peewee.TimestampField()