Como fazer corretamente um-para-muitos junta-se em um (Python) Google App Engine fonte de dados?
-
11-09-2019 - |
Pergunta
Eu tenho alguns modelos estabelecidos como:
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)
Eu estou tentando fazer referência a um aplicativo "pai" em uma imagem assim:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a
)
ss.put()
Mas ele reclama a mim dizendo:
BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)
Eu tentei ultrapassar alguns exemplos na internet e todos eles parecem funcionar muito como o acima. Uma conjunto de documentação Google tem até sugere fazê-lo um pouco diferente, como este:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a.key()
)
ss.put()
Mas isso me dá exatamente o mesmo erro.
O que estou fazendo de errado?
Solução
O problema que eu encontrei ao tentar executar o seu código foi que, aparentemente, você precisa mudar o nome de 'app' em AppScreenshots para outra coisa, como 'apps'. A palavra 'aplicativo' deve ser reservado neste contexto.
Tente esta pergunta em seu lugar. Você poderia fazer .filter () também neste se você não quiser que a primeira entidade.
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)
Aqui está um artigo útil na modelagem de relacionamentos ligação .
Também uma questão relacionada aqui no SO