1

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

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

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

绕过此限制的最佳方法是什么?

4

1 回答 1

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()方法。

于 2013-04-12T21:19:29.647 回答