Вызывается ли специфическая модель put () для каждой сущности, когда db.put () вызывается со списком сущностей? - PullRequest
1 голос
/ 18 февраля 2011

У меня есть несколько моделей в моем приложении GAE, и я переписал put() на некоторые из них. Когда я вызываю db.put() со списком этих объектов, есть ли гарантия, что будет вызываться переопределенный put() для каждого объекта?

Сейчас я вижу, что сущности просто спасаются без вызова. Есть ли хороший способ убедиться, что все сделано перед каждым сохранением, даже партиями?

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Нет. Вам также нужно monkeypatch db.put(). Хорошим примером этого является превосходное сообщение в блоге Ника Джонсона о крючках до и после установки для моделей Datastore .

Если вы посмотрите на исходный код модуля db, вы увидите, что db.put() не вызывает функцию put() объекта.

0 голосов
/ 20 февраля 2011

Вы можете попробовать что-то вроде:

class SomeModel(db.Model):
    aprop = db.IntegerProperty()

    def _populate_internal_entity(self, *args, **kwargs):
        logging.warn('about to Put() SomeModel: %r', self)
        return super(SomeModel, self)._populate_internal_entity(*args, **kwargs)

Однако, возможно, есть лучший способ сделать это. Если вы пытаетесь установить некоторые свойства, вы должны проверить пользовательские классы свойств. Если вы пытаетесь заняться журналированием или кэшированием, вы должны исследовать ловушки хранилища данных.

...