Como fazer corretamente um-para-muitos junta-se em um (Python) Google App Engine fonte de dados?

StackOverflow https://stackoverflow.com/questions/1100472

  •  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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top