2

我设置了一些模型,例如:

class Apps(db.Model):
    name        = db.StringProperty(multiline=False)
    description = db.TextProperty()

class AppScreenshots(db.Model):
    image_file     = db.StringProperty(multiline=False)
    description    = db.StringProperty(multiline=False)
    app            = db.ReferenceProperty(Apps)

我正在尝试在屏幕截图中引用“父”应用程序,如下所示:

a = Apps.get(app_key)   
ss = AppScreenshots(
    image_file     = 'foo',
    description    = 'bar',
    app            = a
)
ss.put()

但它向我抱怨说:

BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)

我已经尝试在互联网上查看一些示例,它们似乎都像上面那样工作。谷歌提供的一组文档建议做一些不同的事情,如下所示:

a = Apps.get(app_key)   
ss = AppScreenshots(
    image_file     = 'foo',
    description    = 'bar',
    app            = a.key()
)
ss.put()

但这给了我完全相同的错误。

我究竟做错了什么?

4

1 回答 1

5

我在尝试运行您的代码时发现的问题是,显然您需要将 AppScreenshots 中的“app”名称更改为其他名称,例如“apps”。在此上下文中必须保留“app”一词。

试试这个查询。如果您不想要第一个实体,您也可以对此执行 .filter() 。

class AppScreenshots(db.Model):
     image_file     = db.StringProperty()
     description    = db.StringProperty()
     apps            = db.ReferenceProperty(Apps)

appsObject = db.Query(Apps).get()

ss = AppScreenshots(image_file = 'foo', description = 'bar',apps = appsObject)

这是一篇关于建模关系链接的有用文章。

还有一个关于SO的相关问题

于 2009-07-09T00:49:44.170 回答