Установка значений по умолчанию для utcnow () с круглыми скобками заставляет Python выполнять функцию utcnow при создании класса, а не при создании нового объекта, использующего этот класс. Вместо этого вы должны установить значение по умолчанию для функции без (). Это передаст функцию как сам объект, а не вызовет ее сразу, и когда новый объект будет создан из этого класса, функция будет выполнена.
Кроме того, Python документы рекомендуют использовать datetime.now вместо utcnow . Кроме того, ваш пример должен выглядеть следующим образом:
import datetime
class Example(mongoengine.Document):
created_at = db.DateTimeField(required=True, default=datetime.datetime.now)
updated_at = db.DateTimeField(required=True, default=datetime.datetime.now)
Что касается обновления атрибута updated_at всякий раз, когда вы вызываете save (), вы можете создать функцию-обертку для save (), которая установит updated_at в datetime. сейчас (), затем сохраните. Затем вместо вызова save () вызывайте функцию-обертку всякий раз, когда хотите сохранить.