计算字段

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索

字段可以使用函数计算值,而不是简单地读取数据库存储的值。计算字段就像常规字段一样声明,但是有额外的compute参数,定义在函数中用来计算值. 在大多数情况下,计算的字段涉及编写一些业务逻辑,因此我们将在第7章第七章 ORM应用逻辑 - 支持业务流程中学习.我们仍将在此解释它们,但将使业务逻辑方面尽可能地简单。让我们来做一个例子:阶段有一个fold字段。我们将在to_do 任务中增加一个计算字段,对应相关阶段的“folded?”标记。

我们应该编辑TodoTask 模型 在todo_model.py文件添加以下内容:

# class TodoTask(models.Model):

stage_fold = fields.Boolean(

'Stage Folded?',

compute='_compute_stage_fold')

@api.depends('stage_id.fold')

def _compute_stage_fold(self):

for task in self:

task.stage_fold = task.stage_id.fold

前面的代码添加了一个新的stage_fold字段和_compute_stage_fold方法用于计算它。通过函数名作为字符串,但它也允许它作为一个可调用的引用传递(函数标识符没有引号)。在本例中,我们应该确保在该字段之前,在Python文件中已定义函数。

通常,当计算依赖于其他字段时,需要@api.depends装饰器。它让服务器知道什么时候重新计算存储或缓存的值。一个或多个字段名被作为参数接受,点符号可以用来跟踪字段关系。

计算函数将指定一个值到字段或多个字段用来计算。如果它不能,就是错误的。既然self是一个记录对象,我们的计算仅仅是 通过stage_id.fold获取“Folded?” 字段。通过将该值(写入)分配给计算字段stage_fold,来实现这一结果。

我们现在还不会对这个模块的视图进行操作,但是您可以立即对任务表单进行快速编辑,以确认计算出的字段是否如预期的那样:使用开发者模式 ,选择编辑视图,并直接在XML表单中添加字段。不用担心:下一次升级时,它将被干净的模块视图所取代。

上一节:使用动态关系的参考字段 下一节:在计算字段上搜索和写入