9

我有一个简单的场景,其中有一个具有名称、电子邮件和关注者属性的用户类。

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 -

任何关于如何对“追随者”属性建模的建议都将受到高度赞赏。提前致谢

4

2 回答 2

30

在键属性上使用种类e.g. some_prop = ndb.KeyProperty(User)只会强制键的种类必须是用户种类。因此,如果需要,您仍然可以使用没有种类的 KeyProperty。

但是,如果您想强制所有跟随者键必须是用户类型(在用户模型内),那么用引号将类型括起来:

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

ndb 备忘单中解释得更好一些

于 2012-09-11T14:00:25.220 回答
2

如果您只想让“追随者”成为 KeyProperty,那么只需输入:

followers = ndb.KeyProperty(repeated=True)

或者,我认为您追求的是指定密钥的类型。

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

我想你可能只是失踪了kind=User

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

于 2012-09-11T12:34:12.720 回答