8

私は、名前、電子メール、およびフォロワーのプロパティを持つUserクラスがあるシンプルなシナリオを持っています。ndb.KeyPropertyを使用して同じモデルを参照する方法は?

class User(ndb.Model): 
    name = ndb.StringProperty(required = True) 
    search_name = ndb.StringProperty(required = True) 
    pw_hash = ndb.StringProperty(required = True) 
    email = ndb.StringProperty() 

    follows = ndb.KeyProperty(Follow, repeated=True) 
    followers = ndb.KeyProperty(User, repeated=True) 

実行中にエラーが表示されます。

File "C:\ujjal\my project\cravel\code2\Users.py", line 46, in User 
    followers = ndb.KeyProperty(User, repeated=True) 
NameError: name 'User' is not defined 
INFO  2012-09-11 11:45:23,953 dev_appserver.py:2967] "GET/HTTP/1.1" 500 - 

「フォロワー」属性のモデルがどのように評価されているかについてのご意見はありません。

followers = ndb.KeyProperty(repeated=True) 

かは、私はあなたをどう思うか、キーの種類を指定するには、後に、次のとおりです。アドバンス

答えて

29

e.g. some_prop = ndb.KeyProperty(User)のみ、キーの種類は、種類のユーザーでなければならないことを強制します。したがって、必要に応じて種類のないKeyPropertyを使用することができます。

あなたはすべてのフォロワーキーが(Userモデルの内部)種類ユーザのものでなければならないことを強制したい場合はしかし、その後、引用符で種類を囲む:

followers = ndb.KeyProperty(kind='User', repeated=True) 

それはndb cheat sheet

に少し良く説明しています
+0

パーフェクト、あなたの入力のための@Bertのおかあさん – ujjalcal

+0

この問題はndb固有ではありません。クラスが定義されるまで、その型によってクラスを参照することはできません。そのため、ndbでは、種類やPython型オブジェクトの文字列名を使用することができます。 –

2

で おかげで、あなただけの「信者」はその後、ちょうど置くKeyPropertyになりたい場合。

follows = ndb.KeyProperty(kind=User,repeated=True) 

おそらくkind=Userが不足していると思います。

キープロパティに種類を使用して

https://developers.google.com/appengine/docs/python/ndb/properties#types

+0

'kind = User'を試しましたが、動作しませんでした。最初のものはうまくいった。しかし、 'kind = User'や単に' User'がなぜうまくいかないのかはまだ分かりません。 – ujjalcal

+0

私は個人的に名前としてUserを使用しないでください。それは衝突する可能性が非常に高い。名前の変更を提案して、再試行してください。しかし、kindを使用すると、キーを割り当てるときにその種類のキーが割り当てられます。モデルの名前を文字列として引用符で囲むこともできます。実際にどちらを使用するかは関係ありませんので、それも試してみてください。 –

+0

あなたのご意見ありがとうございます。あなたは正しかった、 ""その問題を解決してくれるようにしてください。私が得られないことの1つはあなたのコメントです**個人的に私は名前としてユーザーを使用しないでください。それは衝突する可能性があまりにも高い**あなたはもう少し説明できますか? – ujjalcal

関連する問題