2013-08-29 16 views
14

Tôi muốn một trường dấu thời gian cập nhật mỗi khi bản ghi được sửa đổi như trong MySQL.là có một tùy chọn tự động cập nhật cho DateTimeField trong peewee như TimeStamp trong MySQL?

DateTimeField(default=datetime.datetime.now()) sẽ chỉ thiết lập nó lần đầu tiên nó được tạo ra ...

Bất kỳ có một giải pháp đơn giản? Giải pháp duy nhất là đặt thủ công các tùy chọn Cột trong MySQL db?

Trả lời

25

Bạn có thể ghi đè phương thức save trên lớp mô hình của mình.

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

Xin cho biết làm thế nào để làm tương tự cho các cập nhật ví dụ Something.update (othercolumn = foo) .where (id = 2) .execute(). Hoặc tôi có cần phải viết lại mã của tôi để sử dụng Model.save() thay thế không? Thx trước. – chrisinmtown

+1

Nếu bạn đang gọi '.update()' thì bạn có thể cần phải triển khai logic cập nhật dấu thời gian ở phía SQL. 'update()' không gọi 'save()'. – coleifer

+0

Có cách nào để ghi đè lên lớp Mô hình trong Peewee không? – Jeff

2

Chỉ cần sử dụng loại TIMESTAMP trong MySQL. Trường này sẽ tự cập nhật bất cứ khi nào hàng được cập nhật.

Trong model:

last_updated = peewee.TimestampField() 
Các vấn đề liên quan