AppEngine Python - 更新没有二十个elif语句的实体属性

时间:2010-09-08 04:53:21

标签: python djangoappengine

假设我有一个定义了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()函数,但我不认为将所有这些结合起来。

感谢所有帮助。

谢谢。

2 个答案:

答案 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,所以谢谢你帮助我。