Comment bien faire l'un à plusieurs jointures sur un (Python) Google App Engine source de données?
-
11-09-2019 - |
Question
J'ai quelques modèles mis en place comme:
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)
Je suis en train de faire référence à une application « parent » dans une capture d'écran comme ceci:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a
)
ss.put()
Mais il me plaint à dire:
BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)
Je l'ai essayé d'aller sur quelques exemples sur Internet et ils semblent tous fonctionner comme ci-dessus. Un ensemble de la documentation Google a jusqu'à le faire suggère un peu différemment, comme ceci:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a.key()
)
ss.put()
Mais cela me donne exactement la même erreur.
Qu'est-ce que je fais mal?
La solution
Le problème que je trouve en essayant de courir votre code était qu'apparemment vous avez besoin de changer le nom de « app » dans AppScreenshots à quelque chose d'autre comme « apps ». Le mot « app » doit être réservé dans ce contexte.
Essayez cette requête à la place. Vous pouvez faire .filter () trop sur si vous ne voulez pas la première entité.
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)
Voici un article utile sur les relations de modélisation lien .
Aussi une question connexe ici sur le SO