假设我有一个定义了20个不同StringProperty属性的AppEngine模型。然后我有一个Web表单,它为此模型的实体POST更新值。在阅读表单数据后,我最终得到了类似的东西:
entity_key['name'] = 'new_name'
entity_key['city'] = 'new_city'
entity_key['state'] = 'new_state'
etc...
要将这些值实际分配给实体,我现在正在做这样的事情:
if property == 'name':
entity.name = entity_key['name']
elif property == 'city':
entity.city = entity_key['city']
elif property == 'state':
entity.state = entity_key['state']
etc...
有没有办法在没有二十个elif语句的情况下分配属性值?我看到有model.properties()函数,但我不认为将所有这些结合起来。
感谢所有帮助。
谢谢。
答案 0 :(得分:2)
可以通过单个声明获得与if
/ elif
树相同的效果:
setattr(entity, property, entity_key[property])
这只是基本的Python,在1.5.2之后的每个Python版本中都以相同的方式运行(也许更早 - 我多年前没有使用过Python! - ),与App Engine没有任何关系,也不是Django,也不是两者的组合。
答案 1 :(得分:0)
冷却。仅供其他人参考,以下两个片段是相同的:
entity.some_property = "cat";
setattr(entity, "some_property", "cat")
我确实知道了setattr功能,Alex,所以谢谢你帮助我。