アップデート
これは、次のスキームを作成するための私の最善の努力でした
user = self.auth.store.user_model.create_user(email,
password_raw=newpasswd)
if not user[0]: # user is a tuple
return user[1] # Error message
else:
# User is created, let's try making the references
okuser = auth_models.User.get_by_id(long(user[1].key.id()))
okuser.sponsor = auth_models.User.get_by_id(long(sponsor_id)).auth_ids
元の質問
どのユーザーがどのユーザーの「スポンサー」であるかを示すために、expando クラスで自己参照を作成するにはどうすればよいですか? 「スポンサー」は新しいユーザーを招待した人であるため、作成時にそれを保存する必要があり、文字列または文字列リストよりも参照プロパティとして保存する方がはるかにきれいです。
新しいユーザーを作成できますが、参照を作成する方法がわからないため、あるユーザーの別のユーザーが最初のユーザーのスポンサーであることがわかります。これをモデル化する方法は、両方のオブジェクトはユーザーですが、複雑なのはそれがexpandoモデルであるため、参照プロパティの使用方法がわかりません。その方法を教えていただけますか、またはこの問題を最善の方法で解決する方法の手がかりを教えていただけますか?
user = self.auth.store.user_model.create_user(email,
password_raw=newpasswd)
if not user[0]: # user is a tuple
return user[1] # Error message
else:
# User is created, let's try making the reference
okuser = auth_models.User.get_by_id(user[1].key.id())
okuser.sponsor = db.SelfReferenceProperty(User,
collection_name='matched_images', verbose_name='Sponsor')
epando モデルで実際の参照プロパティを保存する最後の部分を行う方法がわかりません。どうすればそれができますか?
アップデート
できないようです:
NotImplementedError: Property sponsor does not support <class 'google.appengine.ext.db.ReferenceProperty'> types.
コード:
user = self.auth.store.user_model.create_user(email,
password_raw=newpasswd)
if not user[0]: # user is a tuple
return user[1] # Error message
else:
# User is created, let's try redirecting to login page
okuser = auth_models.User.get_by_id(long(user[1].key.id()))
okuser.sponsor = db.SelfReferenceProperty(auth_models.User.get_by_id(sponsor_id),collection_name='matched_distributor')
okuser.put()
参照の代わりに文字列を使用することを余儀なくされ、解決策が実行可能になります。
user = self.auth.store.user_model.create_user(email,
password_raw=newpasswd)
if not user[0]: # user is a tuple
return user[1] # Error message
else:
# User is created, let's try redirecting to login page
okuser = auth_models.User.get_by_id(long(user[1].key.id()))
okuser.sponsor = sponsor_id
okuser.put()