Запуск кода, когда mongoengine загружает документ

Мы пытаемся запустить код, который изменяет документ при его загрузке, как часть обслуживания схемы. У нас есть такой документ, как

from mongoengine import Document
from mongoengine.fields import IntField, StringField

class User(Document):
    version = IntField(default=0)
    name = StringField()

Экземпляры пользователя создаются с версией =1 и сохраняются.

Позже мы изменим этот класс следующим образом:

class User(Document):
    version = IntField(default=0)
    name = StringField(max_length=20)

Некоторые из документов версии 1 теперь должны быть усечены:

    def upgrade_1_to_2(self):
        self.name = self.name[:20]

Мы хотим автоматически запускать эту функцию всякий раз, когда пользователь извлекается из базы данных, и только если версия == 1. (Будущие обновления будут upgrade_2_to_3() и т. Д.)

Где в этом API можно разместить код, который запускается при получении документа?

1 ответ

Решение

Похоже, это хороший кандидат на post_init сигнал, и вы можете сделать проверку там.

Смотрите: http://docs.mongoengine.org/guide/signals.html

Другие вопросы по тегам