Как получить грязные факторы модели NDB в pre_put_hook

Можно ли изобразить грязные факторы сущности в pre_put_hook?

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

3 ответа

Следуя предложению Брайана М. Ханта, я проверяю грязные факторы, используя следующий код. В этом случае я проверяю свойство под названием status:

class Blog(ndb.Model):
  status = ndb.IntegerProperty(default=0)

  def __init__(self, *args, **kwargs):
    # make sure the __old_status__ exists when you `new' an object
    # instead of getting it from DataStore. e.g. b = Blog(status=1)
    super(Blog, self).__init__(*args, **kwargs)
    self.__old_status__ = self.status # I check the status only

  @classmethod
  def _post_get_hook(cls, key, future):
    obj = future.get_result()
    setattr(obj, '__old_status__', obj.status)

  def _pre_put_hook(self):
    if (not self.key.id() or self.__old_status__ != self.status)  and (self.status == 1):
      # the blog is (either a new blog or an existing blog) AND its status is changed to published (e.g. value = 1)
      # do sth e.g. save the time when it is published, update FB object cache and etc.
      pass

Извините, это не функция NDB.

Вы можете сделать это, определив на ndb.Model _post_get_hook и _pre_put_hook соответственно сохраните первоначальное значение свойства и сравните его с оригинальным.

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