2012-01-17 8 views
0

を使用して:クエリ私は、データストア内のエンティティを持っているGoogle App Engineのモデルに

In [38]: i1 
Out[38]: <my_app.models.Infospot at 0x4255a90> 

In [39]: i1.key().id() 
Out[39]: 162L 

しかし、私は、そのIDに基づいて照会することはできません。

In [41]: Infospot.get_by_id(162L) is None 
Out[41]: True 

In [45]: Infospot.get(Key.from_path('Infospot', 162L)) is None 
Out[45]: True 

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

+1

最初のコードでは、エンティティが実際にデータストアに格納されていなくても結果を返すモデルベースの操作を行っています。 2番目のコードでは、基本的に、保存されたエントリのデータストアをチェックするクエリを実行しています。そして、それは戻ってきていません。したがって、このタイプとIDを持つエントリはデータストアに見つかりません。クエリーの前にオブジェクトを置くことを忘れているかもしれませんか?それは –

答えて

4

Infospotエンティティが子エンティティである可能性があります。エンティティはその種類、ID、およびすべての親によって一意に識別されるため、ルートエンティティとして取得しようとすると機能しません。

i1.key()という値を出力することで、これが当てはまるかどうかを確認できます。 datastore_types.Key.from_path(u'Something', 123L, 'Infospot', 162L)のように見える場合は、エンティティが種類Somethingのエンティティの子であることを示します。

+0

ビンゴ! 'i1.key()' => 'datastore_types.Key.from_path(u'Something '、126001L、u'SomethingElse'、113L、u'Infospot '、162L、_app = u's〜foo-bar')' –

関連する問題