Sorum şu: Yeni bir model öğesi oluşturmanın en iyi yolu nedir ve sonra hemen okuyun. Örneğin,Yeni bir model varlığını nasıl oluşturabilirim ve sonra hemen okuyabilir miyim?
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()
Bu oldukça sık gibi bir istisna atar:
AttributeError: 'NoneType' object has no attribute 'key'
yani Yeni LeftModel öğesinin geri alınması başarısız oldu. Ben bu problem ile appengine birkaç kez karşılaştım ve benim çözüm her zaman biraz hacky olmuştur. Genellikle, her şey bir denemeye veya varlığın başarılı bir şekilde alıncaya kadar bir süre içinde kullanılmasına izin verir. Model varlığının her zaman sonsuz döngü risklerini (while döngüsünde) çalıştırmadan veya kodumu karıştırmadan (denemeler dışında denemeler durumunda) alınmasını nasıl sağlayabilirim?
otomatik olarak oluşturulmuş olanı kullanmak yerine oluşturulduğunda LeftModel için bir anahtar ayarlamanız yeterlidir. –
+1 iyi belirtilen sorun – msw