Подтвердить что ты не робот

Как узнать, создал ли ndb.Model.get_or_insert новый объект или получил существующий?

Для следующей (поломкой) функции я хочу вернуть True, если объект был создан или обновлен, и False в противном случае. Проблема в том, что я не знаю, получил ли get_or_insert() существующий объект или вставил его. Есть ли простой способ определить это?

class MyModel(ndb.Model):
    def create_or_update(key, data):
        """Returns True if entity was created or updated, False otherwise."""

        current = MyModel.get_or_insert(key, data=data)

        if(current.data != data)
            current.data = data
            return True

        return False
4b9b3361

Ответ 1

get_or_insert() является тривиальной функцией (хотя ее реализация выглядит сложной, поскольку она пытается иметь дело с необычными именами свойств). Вы можете легко написать его самостоятельно:

@ndb.transactional
def my_get_or_insert(cls, id, **kwds):
  key = ndb.Key(cls, id)
  ent = key.get()
  if ent is not None:
    return (ent, False)  # False meaning "not created"
  ent = cls(**kwds)
  ent.key = key
  ent.put()
  return (ent, True)  # True meaning "created"