Mi pregunta es, ¿cuál es la mejor manera de crear una nueva entidad de modelo, y luego leerla inmediatamente después? Por ejemplo,¿Cómo puedo crear una nueva entidad de modelo y luego leerla inmediatamente después?
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()
Esto a menudo se produce una excepción como:
AttributeError: 'NoneType' object has no attribute 'key'
es decir, la recuperación de la nueva entidad LeftModel no tuvo éxito. He enfrentado este problema varias veces con appengine y mi solución siempre ha sido un poco hacky. Usualmente pongo todo en un intento excepto o un ciclo while hasta que la entidad se recupera con éxito. ¿Cómo puedo asegurarme de que la entidad modelo siempre se recupera sin correr los riesgos de bucles infinitos (en el caso del bucle while) o estropear mi código (en el caso de las declaraciones try except)?
simplemente configure una clave para LeftModel al momento de la creación en lugar de usar la que se generó automáticamente. –
+1 problema bien establecido – msw