Хорошим решением является повторное использование одного обработчика сигналов для нескольких документов.
class User(Document):
# other fields...
created_at = DateTimeField(required=True, default=datetime.utcnow)
updated_at = DateTimeField(required=True)
class Post(Document):
# other fields...
created_at = DateTimeField(required=True, default=datetime.utcnow)
updated_at = DateTimeField(required=True)
def update_timestamp(sender, document, **kwargs):
document.updated_at = datetime.utcnow()
signals.pre_save.connect(update_timestamp, sender=User)
signals.pre_save.connect(update_timestamp, sender=Post)
Будьте внимательны, чтобы назначить вызываемое и не фиксированное значение по умолчанию, например default=datetime.utcnow
без ()
,Некоторые другие ответы на этой странице являются неправильными и приведут к тому, что для новых документов всегда будет устанавливаться created_at
во время первой загрузки приложения.
Всегда лучше хранить даты в формате UTC (datetime.utcnow
вместо datetime.now
) в вашей базе данных.