我正在编写从html表单获取数据并修改数据库对象的代码。我只想在数据库对象发生更改时执行put(),因此我需要知道是否有任何更改
到目前为止,我已经尝试了几种方法,我将在代码中加以说明。它们都使用以下设置代码:
def _addFormAttrToModel(self, obj, attr_name, new_attr):
if hasattr(obj, attr_name):
current_attr = getattr(obj, attr_name)
if current_attr == new_attr:
return False
setattr(obj, attr_name, new_attr)
return True
def addFormStringToModel(self, obj, attr_name):
new_attr = self.request.get(attr_name, None)
return self._addFormAttrToModel(obj, attr_name, new_attr)
第一种方法使用or
确定是否有任何方法调用返回True
updated=False
updated = self.addFormStringToModel(customer, "name") or updated
updated = self.addFormStringToModel(customer, "addr") or updated
updated = self.addFormStringToModel(customer, "phone") or updated
if updated:
customer.put()
我试验过的另一种形式使用一个集合:
results= set()
results.add( self.addFormStringToModel(customer, "name"))
results.add( self.addFormStringToModel(customer, "addr"))
results.add( self.addFormStringToModel(customer, "phone"))
if True in results:
customer.put()
我真正想做的是这样的事情:
updated = self.addFormStringToModel(customer, "name") and \
self.addFormStringToModel(customer, "addr") and \
self.addFormStringToModel(customer, "phone")
if updated:
customer.put()
但是,这会在更新的第一个属性之后停止执行。还有更像Python的方式吗
将
any
与列表一起使用:您可以通过列表将其缩短:
要删除冗余代码,应首先定义要检查的字段列表:
然后使用列表聚合将该方法应用于所有值:
any()
将告诉lis中的任何结果是否正确:相关问题 更多 >
编程相关推荐