Как правильно выполнять объединения "один ко многим" в источнике данных Google App Engine (Python)?
-
11-09-2019 - |
Вопрос
У меня есть несколько моделей, настроенных следующим образом:
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)
Я пытаюсь сослаться на "родительское" приложение на скриншоте следующим образом:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a
)
ss.put()
Но он жалуется мне , говоря:
BadArgumentError('_app should be a string; received ag1raWxsZXItcm9ib3RzcgoLEgRBcHBzGAkM (a Key):',)
Я попытался просмотреть несколько примеров в Интернете, и все они, похоже, работают ТОЧНО так же, как описано выше.Один комплект документации Google предлагает сделать это немного по-другому, вот так:
a = Apps.get(app_key)
ss = AppScreenshots(
image_file = 'foo',
description = 'bar',
app = a.key()
)
ss.put()
Но это выдает мне точно такую же ошибку.
Что я делаю не так?
Решение
Проблема, которую я обнаружил при попытке запустить ваш код, заключалась в том, что, по-видимому, вам нужно изменить название "app" в Appscreenshot на что-то другое, например "apps".Слово "приложение" должно быть зарезервировано в этом контексте.
Попробуйте вместо этого выполнить этот Запрос.Ты мог бы это сделать .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)
Вот полезная статья о моделировании отношений Ссылка.
Также связанный с этим вопрос вот на ТАКОМ