目前我有以下代码:
class User(db.Model):
field_names = db.StringListProperty(indexed=False)
field_values = db.StringListProperty(indexed=False)
field_scores = db.ListProperty(int, indexed=False)
def fields_add(user_key_name, field_name, field_value, field_score):
user = User.get(user_key_name)
if user:
try:
field_index = user.field_names.index(field_name) # (1)
user.field_values[field_index] = field_value
user.field_scores[field_index] = field_score
except ValueError:
# field wasn't added to the list before
user.field_names.append(field_name)
user.field_values.append(field_value)
user.field_scores.append(field_score)
user.put()
效果很好,但我想优化一下 - 序列化field_name
,field_value
和field_score
并存储在一个BlobProperty
中:
class User(db.Model):
fields = db.ListProperty(indexed=False)
f = {
'f': field_name,
'v': field_value,
's': field_score,
}
user.fields = simplejson.dumps(f)
但是这样的方法代码(1)应该怎么样?如何查找更新记录?
答案 0 :(得分:1)
如果user.fields
是一个字段列表,其中'f'
是字段名称,这是您当前问题的一个可能答案:
field_index = [field['f'] for field in user.fields].index(field_name)
目前还不清楚为什么你的版本在你的情况下更加优化,但我会接受你的意见。 :)
答案 1 :(得分:0)
您可以使用json或pickle序列化对象。 所以举个例子。如果您的模型包含属性:udata = db.BlobProperty() 序列化对象如:.. undata = pickle.dumps(object)。