如何通过Google App Engine分配ListProperty?
name = self.request.get("name")
description = self.request.get("description")
list = '''insert code here'''
我希望列表像字典一样工作,如果使用Google App Engine,这是否可行?如何:
[wordone:得分; wordtwo:得分; wordthree:得分]
^我希望list属性存储这样的数据,这怎么可能?
最佳答案
实际上,您将无法在ListProperty
中存储真正的字典作为类型(它仅支持数据存储属性类型,而dict
不是其中之一),因此您将无法获得自己的行为。重新寻找。所有数据都一样吗(即每个元素代表一个单词分数)?假设将每个单词作为其自己的属性存储在模型上没有意义,一种“肮脏”的解决方案是制作类型为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
属性(列表),寻找目标词并在其后的位置返回元素。更复杂的建议
但是,如果不是这样,则可以考虑创建另一个类似于以下内容的模型(例如
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