2

私はいくつかのモデルを次のように設定しています:

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()

しかし、それは私にまったく同じエラーを与えます。

私は何が間違っているのですか?

4

1 に答える 1

5

コードを実行しようとしたときに見つけた問題は、AppScreenshotsの「app」の名前を「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)

これは、関係のリンクのモデリングに関する役立つ記事です。

SOに関するここの関連質問も

于 2009-07-09T00:49:44.170 に答える