Установка свойства is_saved объекта модели NDB не работает должным образом - PullRequest
0 голосов
/ 24 августа 2018

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

Я перехожу сот ext.db к ndb, и некоторые логики в моих моделях используют функцию ext.db is_saved(). документация по миграции отправляет меня на этот SO вопрос , который говорит мне, что я могу установить свойство по умолчанию, например is_saved, на False, установить некоторые перехваты post / get, которые меняют егона True и я получу ту же функциональность.

Итак, у меня есть модель Workout:

class Workout(ndb.Expando):
  ..properties..

  is_saved = False

  def __init__(self, parent=None, **kwds):

    self._summary = None
    self._description = None
    self._snapshots = kwds.get('_snapshots')
    self._action = kwds.get('_action')
    self._record_id = kwds.get('_record_id')
    self._packageNumber = None
    super(Workout, self).__init__(parent=None, **kwds)

  @classmethod
  def _post_get_hook(cls, key, future):
    obj = future.get_result()
    if obj is not None:
      # test needed because post_get_hook is called even if get() fails!
      obj.is_saved = True

  def _post_put_hook(self, future):
    logging.info(future)
    self.is_saved = True

Другая логика в моей кодовой базе в конечном итоге сохраняет (или put() ing) сущность, и я в конечном итоге сохраню переменную workout сущности:

>>> workout
Workout(key=Key('Workout', 5132107961597952), calories=2.0, creation_date=datetime.datetime(2018, 8, 24, 18, 23, 0, 769000), distance=1.0,  elapsedSeconds=21600, is_deleted=False, is_saved=True)

Отлично, is_saved равно True, логика работает.Доступ к нему, хотя,

>>> workout.is_saved
False

Хорошо, что, если я сам установлю это:

>>> workout.is_saved = True
>>> workout.is_saved
False

Ну, это противоречит всей логике и разуму.Может быть, это объект?

>>> workout.calories = 0.555
>>> workout.calories
0.555

Хорошо, не проблема с объектом.Понятия не имею, что здесь не так.

...