Обновить поле DateTime в mongoengine с помощью функции auto now add
Я пытаюсь сделать вилку из MongoEngine , которая позволит автоматически обновлять DateTimeField
на основе передачи True в auto_now
или auto_now_add
(a la Django ).
До сих пор я добавлял атрибуты к __init__
методу DateTimeField
примерно так:
def __init__(self, auto_now=None, auto_now_add=None, **kwargs):
self.auto_now, self.auto_now_add = auto_now, auto_now_add
super(DateTimeField, self).__init__(**kwargs)
К сожалению, я не могу понять, как заполнить это значение чисто, когда документ создается / сохраняется. Единственное решение, которое я вижу до сих пор, - это добавление специфичного поведения поля в методы сохранения или проверки BaseDocument... Но мне это не нравится.
Кто-нибудь знает лучший метод?Кстати: я подумал о том, чтобы пойти на это после прочтения этого вопроса и комментария @ equinoxel о расширении mongo и использовании этого атрибута в django.
1 ответ:
Вы можете добавить сигнал предварительного сохранения и обновить дату документа перед сохранением.
class MyDoc(Document): name = StringField() updated_at = DateTimeField(default=datetime.datetime.now) @classmethod def pre_save(cls, sender, document, **kwargs): document.updated_at = datetime.datetime.now() signals.pre_save.connect(MyDoc.pre_save, sender=MyDoc)
Основные проблемы с этим-они не будут обновлены, если вы вызовете
update
или если вы делаете массовые обновления, например:MyDocs.objects.update(set__name=X)
Добавлен билет: https://github.com/MongoEngine/mongoengine/issues/110