首页 > 解决方案 > 更改不起作用

问题描述

我在 sale.order.line 中创建了一个新字段

_columns = { 'od_deivered_quantity':fields.float('Delivered Quantity',trackvisibility = onchange,readonly = False) }

然后我编写了以下 onchange 函数:

@api.depends('product_uom_qty')
def onchange_delivered_order(self, cr, uid, ids,context=None):
   res = {}
   delivered_qty = self.product_uom_qty
   return {'value':{'od_delivered_qty':delivered_qty}}

XML代码如下:

<xpath expr="//field[@name='order_line']/tree//field[@name='product_uom_qty']" position="after">
              <field name = "od_delivered_qty"/>
          </xpath>

但它不起作用

标签: odooodoo-8

解决方案


抱歉,您的代码有点混乱和错误;此外,您似乎正在混合旧的 API 样式(v8 之前),如在字段声明期间和新的,用于 onchange 方法。

让我们回顾一下,我想知道我是否理解您的要求:您需要一个od_deivered_quantityproduct_uom_qty. 那正确吗?

我建议类似以下块(我将使用新的 API 样式):

od_deivered_quantity = fields.Float(
    "Delivered Quantity", track_visibility="onchange", readonly=False
)

@api.onchange('product_uom_qty')
def onchange_delivered_order(self):
    # if isinstance(self.product_uom_qty, bool):
    #    return
    delivered_qty = self.product_uom_qty
    self.od_delivered_qty = delivered_qty

请尝试检查此 onchange 方法的行为,当它在您的模块中启动并运行时:我在其中添加了一个带注释的布尔检查,以防万一(由于任何尴尬的原因)该方法将被调用,并False在 product_uom_qty 上传递一个值.

谈到视图,您的 XML 可能没问题,因为采用新的 API 样式https://www.odoo.com/documentation/8.0/reference/orm.html#onchange-updating-ui-on-the-fly

计算字段和新 API onchanges 都由客户端自动调用,而无需将它们添加到视图中

让我知道它是否会正常工作,否则您会遇到任何问题。


推荐阅读