如何在(Python)Google App Engine数据源上正确执行一对多连接?

Jer*_*gan 2 python google-app-engine gql

我有一些模型设置如下:

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)
Run Code Online (Sandbox Code Playgroud)

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

a = Apps.get(app_key)   
ss = AppScreenshots(
    image_file     = 'foo',
    description    = 'bar',
    app            = a
)
ss.put()
Run Code Online (Sandbox Code Playgroud)

但它抱怨我说:

BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)
Run Code Online (Sandbox Code Playgroud)

我试过在互联网上查看一些例子,他们似乎都像上面那样工作.一组文件的谷歌拥有了不同的建议做了一下,像这样的:

a = Apps.get(app_key)   
ss = AppScreenshots(
    image_file     = 'foo',
    description    = 'bar',
    app            = a.key()
)
ss.put()
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Jas*_*ard 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)
Run Code Online (Sandbox Code Playgroud)

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

另外一个相关的问题在这里SO