如何基于web2py中的多个其他字段创建计算字段?

时间:2013-04-12 18:09:16

标签: web2py

我的数据库模型中有一个计算字段,如下所示:

Field('computed_field', compute=lambda(page): compute_this_field(page)),

我最近发现的是,compute只传递更新调用期间更改的页面字段。如果我的函数compute_this_field需要其他字段来完成计算,那么它就不会得到它们。

解决此限制的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

问题在于,如果要更新多个记录,并且记录在未更新的字段上没有相同的值,则无法为所有更新的记录计算单个计算值 - 每个记录需要自己的计算值,无法在单个更新中处理。如果要更新计算值,则应传入计算所需的所有值(即使其中一些值未更改)。一种方法如下:

query = db.mytable.id == [some id]
row = db(query).select().first()
row.update(field1=newvalue1)
db(query).update(**row.as_dict())

上面首先提取单个记录(即Row对象),对Row对象进行更改,然后传递整个Row对象(包括所有字段) )到.update()方法。