Как я могу создать новый объект модели, а затем сразу же прочитать его?

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

class LeftModel(ndb.Model):
    name = ndb.StringProperty(default = "John")
    date = ndb.DateTimeProperty(auto_now_add=True)

class RightModel(ndb.Model):
    left_model = ndb.KeyProperty(kind=LeftModel)
    interesting_fact = ndb.StringProperty(default = "Nothing")

def do_this(self):
    # Create a new model entity
    new_left = LeftModel()
    new_left.name = "George"
    new_left.put()

    # Retrieve the entity just created
    current_left = LeftModel.query().filter(LeftModel.name == "George").get()

    # Create a new entity which references the entity just created and retrieved
    new_right = RightModel()
    new_right.left_model = current_left.key
    new_right.interesting_fact = "Something"
    new_right.put()

Это довольно часто вызывает исключение типа:

AttributeError: 'NoneType' object has no attribute 'key'

т.е. получение нового объекта LeftModel не увенчалось успехом. Я несколько раз сталкивался с этой проблемой с appengine, и мое решение всегда было немного хакерским. Обычно я просто помещаю все в цикл try, кроме или while, пока объект не будет успешно извлечен. Как я могу гарантировать, что объект модели всегда извлекается без риска бесконечных циклов (в случае цикла while )или испорченного моего кода (в случае операторов try exclude )?

5
задан user714852 21 July 2012 в 09:21
поделиться