首页 > 解决方案 > Price_unit 只读解决方法 onchange

问题描述

所以我的目标是在销售订单行中设置 price_unit 为只读字段。但是当你这样做时,你会遇到 onchange 方法的问题,所以如果我只是在写入后添加属性只读 price_unit 总是为 0。

因此,作为解决方法,我创建了 onchange 方法来存储 price_unit 值,然后在 write 和 create 方法中将它们添加到 price_unit。

但是 write 方法中的 vals 没有 price_unit_values 但同时,我的 onchange 方法将它们添加到了 price_unit_values 之前。

我收到了这个错误

 if vals['price_unit_values']:
    KeyError: 'price_unit_values'
 <xpath expr="/form/sheet/notebook/page/field/tree/field[@name='price_unit']" position="attributes">
                     <attribute name="readonly">1</attribute>
    </xpath>
class SaleOrderLine(models.Model):
    _inherit = "sale.order.line"

    price_unit_values = fields.Float(string='Price Unit Values', digits=(6, 2), required=False)

@api.onchange('price_unit')
    def _onchange_price_unit(self):
        for rec in self:
            if rec.price_unit:
                rec.price_unit_values = rec.price_unit


@api.multi
    def write(self, vals):
         if vals['price_unit_values']:
             vals['price_unit'] = vals['price_unit_values']
        return super(SaleOrderLine, self).write(vals)

 @api.model
def create(self, vals):
    if vals['price_unit_values']:
        vals['price_unit'] = vals['price_unit_values']
    rec = super(SaleOrderLine, self).create(vals)
    return rec

标签: odooodoo-8odoo-9

解决方案


推荐阅读