BadValueError:预期的字符串,在创建子实体时获得Key

时间:2014-04-03 12:19:06

标签: google-app-engine python-2.7 google-cloud-datastore app-engine-ndb

首先我要说的是我对Python,应用引擎和数据存储区都很陌生,所以如果我遗漏了一些明显的东西,请善待。

我正在尝试使用祖先关系在数据存储区中设置一些数据,其方式与Google中示例留言板应用程序的方式相同:

class Guestbook(webapp2.RequestHandler):
  def post(self):
    greeting = Greeting(parent=guestbook_key)

我创建此代码作为实验,看看我是否可以让它工作:

class Subscriber(ndb.Model):
    user_nickname = ndb.StringProperty()
    user_id = ndb.StringProperty()

class Music(ndb.Model):
    level = ndb.StringProperty() # top or sub
    parent = ndb.StringProperty() # only if sub
    title = ndb.StringProperty()

class SetupHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        subscriber = Subscriber(id=user.user_id())
        subscriber.user_id = user.user_id()
        subscriber.user_nickname = user.nickname()

        haydn = Music(parent=subscriber.key)
        haydn.level = "top"
        haydn.title = "Haydn Trumpet Concerto"
        haydn.put()

在我看来,好像我正在尝试做同样的事情..但是我得到了这个错误:

  

文件“... Application \ datastoreexplore \ main.py”,第41行,在get中       haydn = Music(parent = subscriber.key)BadValueError:预期字符串,得到Key('Subscriber','12169615523634875051')

我花了几个小时阅读文档并搜索stackoverflow和其他地方。我很难过。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的问题是您已将parent定义为StringProperty但是如果要创建具有anancestor的实体,则传入一个有效构造函数参数的键。你不应该拥有一个叫做父母的财产。