Odoo 11:如何正确实现@api.onchange



我想计算一个电话号码,如果8位置的号码是";0";或";1〃;我只想打印最后4个数字;(3( ";在它们之前,否则只打印4个数字,但实际情况是,我的代码正在打印";0.0";我不知道为什么,我会感谢你的帮助。。。

这是我的python代码:

class Employee(models.Model):
_inherit = "hr.employee"
marcado_rapido = fields.Float("MarcadoRapido",compute='_compute_marcado_rapido')
@api.onchange("emp.marcado_rapido")
def onchange_compute_marcado_rapido(self):
for num in self:
num = "809-257-1457"
if num[8] in ('0','1'):
"(3)"+num[8:]

这是我的xml代码:

<td>
<t t-foreach="env['hr.employee'].search([('department_id', '=', dep.id)])" t-as="emp">
<div class="contact_form">
<img t-if="emp.image" t-att-src="'data:image/png;base64,%s' % to_text(emp.image)"/>
<div class="bloqueP">
<div class="bloque" t-field="emp.marcado_rapido"/>
</div>
</div>
</t>
</td>

@onchange只支持简单字段名称,不支持点名称(关系字段的字段,如partner_id.tz(,将被忽略

您可以查看官方文档,了解onchange decorator的工作原理以及限制。

0.0是浮点字段的默认值,marcado_rapido的值使用_compute_marcado_rapido函数计算。如果onchange方法中更新的字段取决于marcado_rapido字段值,则可以使用相同的方法计算其值

应该使用compute装饰而不是onchange,但compute方法的方法总是依赖于其他字段。我的建议是使用另一个计算字段,类似于这样:

class Employee(models.Model):
_inherit = 'hr.employee'

# If your number contains special characters(like '-') you should use `Char` insted of `float`
num_telefono = fields.Char('Num. Telefono')
marcado_rapido = fields.Char('MarcadoRapido', compute='_compute_marcado_rapido')
@api.depends('num_telefono')
def _compute_marcado_rapido(self):
for rec in self:
num = rec.num_telefono[-4:]
rec.marcado_rapido = '(3){}'.format(num) if num[:1] in ('0','1') else num

现在,您可以从XML中调用marcado_rapido

我希望这个答案能对你有益。

最新更新