1

アップデート

これは、次のスキームを作成するための私の最善の努力でした ここに画像の説明を入力

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()
4

1 に答える 1

1

プロパティ クラスのインスタンスをモデルのインスタンスに割り当てることはできません。プロパティ クラスはプロパティを定義するものであり、個々の値を表すものではありません。

やりたいことを行う最も簡単な方法は、通常のモデルと同じようにプロパティを追加することです。expandos を使用しているからといって (ちなみになぜ?)、それらに通常のプロパティを設定できないわけではありません。

于 2012-01-04T01:55:38.610 に答える