Как автоматически обновить время обновления в MongoEngine? - PullRequest
0 голосов
/ 30 марта 2020

Есть несколько коллекций, которые я создал с помощью flask -mongoEngine. Например, такие как Автор, Книга, Компания. Та же самая часть, они имеют 2 поля с именем

created_at = db.DateTimeField(required=True, default=utcnow())
updated_at = db.DateTimeField(required=True, default=utcnow())

Каждый раз, когда я создаю новый документ, мне нужно обновлять значения create_at и updated_at, также когда я обновляю документ, мне нужно обновлять значение updated_at. Есть ли хороший способ, когда я делаю операцию save (), эти поля времени могут автоматически обновляться?

1 Ответ

0 голосов
/ 21 апреля 2020

Установка значений по умолчанию для 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 () вызывайте функцию-обертку всякий раз, когда хотите сохранить.

...