実際には、真のディクショナリをタイプとしてaに格納することはできませんListProperty
(データストアプロパティタイプのみをサポートし、そのうちのdict
1つではありません)。そのため、探している動作を取得することはできません。すべてのデータは同じですか(つまり、各要素は単語のスコアを表します)?各単語を独自のプロパティとしてモデルに保存しても意味がないと仮定すると、「汚い」解決策の1つはListProperty
、タイプを作成しstr
、単語とスコアを別々の要素として追加することです。次に、リスト内の単語を検索すると、その単語のインデックス位置+1の値が返されます。これは次のようになります。
class MyEntity(db.Model):
name = db.StringProperty()
description = db.TextProperty()
word_list = db.ListProperty()
次に、次のような単語を追加できます。
new_entity = MyEntity()
new_entity.word_list = ['word1', 1, 'word2', 2, 'word3', 10]
次に、特定のエンティティをクエリし、そのword_list
プロパティ(リスト)を調べて、ターゲットワードを探し、その1つ後の位置に要素を返すことができます。
より複雑な提案
ただし、それがオプションでない場合は、次のような別のモデル(たとえばWordScore
)を作成することを検討できます。
class WordScore(db.Model):
word = db.StringProperty()
score = db.IntegerProperty()
次に、新しいスコアを追加する必要があるときはいつでも、WordScore
インスタンスを作成し、プロパティに入力して、適切なエンティティに割り当てます。私はこれをテストしていませんが、アイデアは次のようになります。
# Pull the 'other' entity (this would be your main class as defined above)
q = OtherEntity.all()
q.filter('name =', 'Someone')
my_entity = q.get()
# Create new score
ws = WordScore(parent=my_entity)
ws.word = 'dog'
ws.score = 2
ws.put()
次に、次のようなことを行うことで、「誰か」のスコアを引き出すことができますdog
(ここでも、今のところ完全にテストされていません-警告されます:)):
# Get key of 'Someone'
q = OtherEntity.all()
q.filter('name =', 'Someone')
my_entity = q.get().key()
# Now get the score
ws = WordScore.all()
ws.filter('word = ', 'dog').ancestor(my_entity)
word_score = ws.get().score