4

Google App Engine を使用した Web アプリケーションの開発は初めてです。

リスト プロパティ( ) に null 値が設定されているデータストア内のエンティティを確認したいと考えていましたdb.ListProperty。ただし、entity.listGAE に対して何かをチェックしようとすると、次のエラーが表示されます。

'super' object has no attribute 'list'.

いくつかの検索の後、このSOの質問で、GAEデータストアエンティティのリストプロパティに空の値を設定することは、プロパティをまったく設定しないことと同等であることがわかりました。これは私のエラーを説明しています。

listそのため、プロパティがまったく設定されていないデータストア内のエンティティを照合する必要があります。GAE のドキュメントを見ると、エンティティに特定のプロパティ セットがあるかどうかを確認できる方法がまだ見つかりません。

注: GQL でこれを行う必要はありません。GQL を使用してすべてのエンティティを取得し、Python で確認できます。しかし、GQL ソリューションでも問題ありません。

4

3 に答える 3

15

これについては、3 つの方法が考えられます。

おそらく、元のモデルには 'list' 属性がなく、後で追加したため、データストアに 'list' 属性のない古いインスタンスがある可能性があるため、この状況に陥っている可能性があります。データストアを通過し、すべてのエンティティに 'list' 要素があることを確認する mapreduce 関数を作成できます。

それ以外の場合は、python hasattr 関数を使用できます

if hasattr(entity, 'list'):
    a = entity.list[0] # or whatever operation you want

3 番目に、例外ハンドラーを使用してエラー ケースをキャッチできます。

于 2012-07-16T19:50:46.617 に答える
2

GQL でこれを行う方法はなく、既存の値でのみフィルタリングできます。代わりに、計算されたプロパティの何らかの形式を使用する必要があります。NDB はこれらをサポートしています。または、_pre_put フックをオーバーライドして、リストの長さなどの他のプロパティを設定することもできます。これにより、この新しいプロパティ == 0 に対してクエリを実行できます。

于 2012-07-17T08:12:30.427 に答える