Odoo的on_change无法正常工作

时间:2015-09-14 17:02:45

标签: python openerp onchange odoo odoo-8

我有一个包含许多元素的表单。其中一个是名称为evaluation_id的下拉列表。我正在尝试在on_change( )上创建一个Odoo evaluation_id事件,其中表单中的另一个元素 - deadline将使用特定值进行更新。

在我的XML中,我有:

<field name="evaluation_id" string="Appraisal" on_change="onchange_evaluation_id(evaluation_id)"/>

我在Python脚本中有这个

def onchange_evaluation_id(self, cr, uid, ids, evaluation_id, context=None):

    return {'value': { 'deadline': 2015}}

以下是hr_evaluation_view.XML脚本的hr_evaluation.PY和摘要的原始代码。

我在这里做错了什么?当我检查网络日志时,我发现on_change函数甚至没有加载。

我该怎么做才能解决这个问题?你能帮忙的话,我会很高兴!感谢。

2 个答案:

答案 0 :(得分:3)

当odoo函数内部的某些更改被触发时,odoo中有两个选项可用。

<强> @ api.onchange

如果在窗体中更改了装饰器中指定的任何字段,则此装饰器将触发对装饰函数的调用。此范围仅限于相同的屏幕/模型。

您可以在@ api.depends和@ api.onchange中表示相似之处,但有些不同之处在于onchange的范围仅限于相同的屏幕/模型,而@ api.depends也适用于其他相关的屏幕/模型。

@api.onchange('field')
def onchange_field(self)
    self.deadline= value

<强> @ api.depends

这个装饰器专门用于&#34; fields.function&#34;在odoo。对于&#34; field.function&#34;,您可以计算该值并将其存储在一个字段中,在该字段中,计算可能取决于同一个表或某个其他表的某些其他字段,其中您可以使用@api.depends来保持观看&#39;在一些桌子的领域。

因此,如果装饰器中的任何字段被ORM更改或以“#”形式更改,则会触发对装饰函数的调用。

@api.depends('field')
def function_name(self)
    self.deadline = value

有关详细信息,Here是描述Odoo v8所有API的链接。

答案 1 :(得分:1)

这个方法可以写成py文件。如果您只在Odoo-v8中工作,这将有效。

@api.onchange('evaluation_id')
def onchange_evalution_id(self)
    self.deadline='2015'