Wie man richtig tun one-to-many schließt sich an einer (Python) Google App Engine-Datenquelle?
-
11-09-2019 - |
Frage
Ich habe einige Modelle aufgebaut wie:
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)
Ich versuche, ein "Elternteil" app in einem Screenshot zu verweisen wie folgt:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a
)
ss.put()
Aber es wirft mir sagen:
BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)
Ich habe im Internet über ein paar Beispiele versucht zu gehen und sie alle scheinen genau wie die oben zu arbeiten. Eine der Dokumentation festgelegt Google hat nach oben schlägt es zu tun ein wenig anders, wie folgt aus:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a.key()
)
ss.put()
Aber das gibt mir genau die gleichen Fehler.
Was mache ich falsch?
Lösung
Das Problem, das ich gefunden, wenn sie versuchen, Ihren Code zu laufen war, dass anscheinend müssen Sie den Namen ‚App‘ ändern in AppScreenshots auf etwas anderes wie ‚Apps‘. Das Wort ‚App‘ ist in diesem Zusammenhang reserviert werden.
Versuchen Sie stattdessen diese Abfrage. Sie könnten .filter () auch auf dies tun, wenn Sie nicht die erste Einheit wollen.
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)
Hier ist ein hilfreicher Artikel über Modellierung Beziehungen Link .
Auch eine weitere Frage hier auf SO