from google.appengine.ext import db
class Parent(db.Model):
app_id = db.StringProperty()
class Child(db.Model):
app_id = db.ReferenceProperty(Parent,collection_name='children')
type = db.StringProperty()
count = db.IntegerProperty()
@db.transactional
def increment_counter(app,childName):
childA = Child.all().ancestor(app).filter('type =',childName).get()
if childA is not None:
obj = db.get(childA.key())
obj.count += 1
obj.put()
else:
childA = Child(app_id=app.key(),type=childName,count=0)
childA.put()
increment_counter(Parent.all().filter('app_id =',app_id).get().key(),childKey)
childA が空の場合、これは put() のタイトル エラーで失敗します。
私の頭の中で、トランザクションで使用している単一の親エンティティに新しい子エンティティをアタッチしたいと考えています。それがまだ存在しない場合は、インクリメントします。これが祖先クエリと見なされないのはなぜですか?また、目的の効果を得るために代わりに何をすべきですか?