2009-07-08 3 views
2

私はいくつかのモデルは以下のように設定している:私はそうのようなスクリーンショットに「親」のアプリを参照しようとしている(Python)Google App Engineデータソースで1対多の結合を正しく行うにはどうすればよいですか?

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):',) 

私はインターネット上のいくつかの例を試してみましたが、それらはすべて上記のようにちょうどうまくいくようです。

a = Apps.get(app_key) 
ss = AppScreenshots(
    image_file  = 'foo', 
    description = 'bar', 
    app   = a.key() 
) 
ss.put() 

しかし、それは私にまったく同じエラーを与える:一つset of documentation Googleは、このように、少し違っそれをやっ示唆アップしています。

私は間違っていますか?

答えて

5

あなたのコードを実行しようとしたときに見つかった問題は、明らかにAppScreenshotsの 'app'の名前を 'apps'のようなものに変更する必要があることでした。この文脈では、「app」という単語を予約する必要があります。

代わりにこのクエリを試してください。最初のエンティティが必要ない場合は、これでも.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) 

ここでは、モデル化関係linkの参考資料です。

また、関連する質問here on SO

+0

ええねえ...私はparent_appするためにそれを移動し、それがうまく働きました。ありがとう! –

+0

私は昨夜それを考え出したと思っています;) –

+0

うれしい私は助けることができました。 –

関連する問題