0

我想计算一个电话号码,如果 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>
4

2 回答 2

0

您应该使用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

现在您可以marcado_rapido从您的 XML 调用。

我希望这个答案对你有帮助。

于 2022-02-10T23:25:50.873 回答
0

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

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

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

于 2022-02-10T21:07:02.970 回答