gaeに一意の値を設定したいので、ドキュメントを読んで、「トランザクション」がアトミックであることがわかりました。
https://developers.google.com/appengine/docs/python/ndb/transactions
class Account(ndb.Model):
""""Required DB """
username = ndb.StringProperty(required=True)
password = ndb.StringProperty(required=True)
mail = ndb.StringProperty(required=True)
salt = ndb.StringProperty(required=True)
date = ndb.DateTimeProperty(auto_now_add=True)
name = ndb.StringProperty()
last_name = ndb.StringProperty()
phone_number = ndb.IntegerProperty()
postal = ndb.IntegerProperty()
city = ndb.StringProperty()
products = ndb.IntegerProperty(repeated=True)
@ndb.transactional
def create_account(self):
acc = Account.query(Account.username==self.username)
acc = tuple(acc)
if len(acc)== 0:
self.put()
else:
#yield error
pass
私はawallysが同じエラーを取得します
BadRequestError:
トランザクション内では、祖先クエリのみが許可されます。
私のデータベースモデル「アカウント」には祖先がありません。それが唯一の「祖先」ではないでしょうか?