Как узнать, создал ли 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
Ответы
Ответ 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"