我有一个包含许多元素的表单。其中之一是 name=evaluation_id
的下拉列表。我正在尝试在 evaluation_id
上创建一个 Odoo on_change( )
事件,从而表单中的另一个元素 - 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 函数甚至没有加载。
我可以做什么来解决这个问题?你能帮忙的话,我会很高兴!谢谢。
最佳答案
当在字段内进行一些更改时,将触发函数,odoo 中有两个选项可供使用。
@api.onchange
如果装饰器中指定的任何字段在表单中发生更改,则该装饰器将触发对装饰函数的调用。这里范围仅限于同一屏幕/型号。
您可能会在@api.depends和@api.onchange中发现相似之处,但有些区别是onchange的范围仅限于同一屏幕/模型,而@api.depends也适用于其他相关屏幕/模型。
@api.onchange('field')
def onchange_field(self)
self.deadline= value
@api.depends
这个装饰器专门用于odoo中的“fields.function”。对于“field.function”,您可以计算值并将其存储在一个字段中,其中计算可能取决于同一表或其他表的某些其他字段,在这种情况下您可以使用 @api.depends
来“监视”某个表的字段。
因此,如果装饰器中的任何字段“被 ORM 更改或在表单中更改”,这将触发对装饰函数的调用。
@api.depends('field')
def function_name(self)
self.deadline = value
欲了解更多信息,Here是描述 Odoo v8 所有 API 的链接。
关于python - Odoo 中的 on_change 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570103/