2012-05-11 16 views
4

のは、私が持っているとしましょう:Google App Engineの投影クエリがエンティティキーを返すことはできますか?

class Like(db.Model): 
    user = db.ReferenceProperty(User,collection_name='likes') 
    photo = db.ReferenceProperty(Photo,collection_name='likes_received') 
    created = db.DateTimeProperty(auto_now_add=True) 

それが写真のキーのリストだけを返す投影クエリを実行することは可能ですか?

photos = db.GqlQuery("SELECT photo FROM Like WHERE created < DATETIME(2013, 1, 1, 0, 0, 0)").fetch(10) 

上記のコードは生成します。あなたの写真のクラスがまだインポートされていないよう

BadValueError: Unsupported data type (<class 'models.Photo'>) 

答えて

1

私はお詫びします、私の最初の答えは間違っていました。射影クエリには本当の問題があります - ReferencePropertyは(まだ)サポートされていません。アルフレッドはこれを検討している。 1.6.6プレリリースのSDKが今日出ていて、これは1.6.5 SDkに既に存在していたので、これを1.6.6で修正することはできませんが、1.6.7が可能です。

回避策として、db.ListProperty(db.Key)を使用できます。これはキーのリスト(1つのキーのみを格納します)、またはStringPropertyの値をキーのstr()です。

+0

Brilliant、情報と提案された回避策をありがとう! – MichalM

1

が鳴ります。

+0

この機能を利用するにはどうすればいいですか?私は思っていたすべての順列を試してみましたが、投影クエリでReferencePropertyを指定すると一貫して失敗します。プロジェクションクエリで許可されている他のプロパティを使用している場合、正確に同じコードが機能します(参照先のドキュメント:https://developers.google.com/appengine/docs/python/datastore/queries#Query_Projection) – Sologoub

+0

フォトクラスをインポートしました。ファイル内の他の場所で使用されます。私は一般的に@Sologoubと同じ動作を観察しています。 SDKでのみテストされています。 – MichalM

+0

Hm。参照プロパティの投影クエリはサポートされていないようです。私は尋ねてみましょう。 –

関連する問題