我的数据库模型中有一个计算字段,如下所示:
Field('computed_field', compute=lambda(page): compute_this_field(page)),
我最近发现的是,计算只传递在更新调用期间更改的页面字段。如果我的函数 compute_this_field 需要其他字段来完成其计算,它不会得到它们。
绕过此限制的最佳方法是什么?
我的数据库模型中有一个计算字段,如下所示:
Field('computed_field', compute=lambda(page): compute_this_field(page)),
我最近发现的是,计算只传递在更新调用期间更改的页面字段。如果我的函数 compute_this_field 需要其他字段来完成其计算,它不会得到它们。
绕过此限制的最佳方法是什么?
问题是,如果您要更新多条记录,并且这些记录在未更新的字段上没有相同的值,则无法为所有更新的记录计算单个计算值——每条记录都需要它自己的计算值,无法在一次更新中处理。如果您希望更新计算值,则应传入计算所需的所有值(即使其中一些没有改变)。一种方法如下:
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()
方法。