Openerp 一个2更改功能上的任意字段可以';不改变自己的价值吗?

Openerp 一个2更改功能上的任意字段可以';不改变自己的价值吗?,openerp,odoo,odoo-8,openerp-8,Openerp,Odoo,Odoo 8,Openerp 8,我有这两个字段 'name' : fields.char('Name'), 'addresses' : fields.one2many('res.partner.address', 'partner','Addresses'), 此功能: def addresses_change(self, cr, uid, ids, name, addresses, context=None): value = {} new_add

我有这两个字段

'name'              : fields.char('Name'),
'addresses'         : fields.one2many('res.partner.address', 'partner','Addresses'),
此功能:

def addresses_change(self, cr, uid, ids, name, addresses, context=None):
        value = {}

        new_addresses = []
        address_pool = self.pool.get('res.partner.address')
        for address in address_pool.browse(cr, uid, addresses[0][2], context=context):
            new_addresses.append((1,address.id,{'street':'wall street','zip':'7777','partner': ids[0],'active':True}))

        value.update(name='whatever')
        value.update(addresses=new_addresses)
        return {'value':value}
以及这些视图字段:

<field name="name" on_change="addresses_change(name,addresses)"/>
<field name="addresses" on_change="addresses_change(name,addresses)"/>

现在,当我更改
名称
时,
名称
地址
都会更新。但是当我更改
地址时,它自己的值不会更新,但是
名称会更新。所以这种奇怪的行为只影响
one2many
字段。为什么会这样

我如何将更改事件中的
添加到
one2many
字段中,以更新其自身的值


编辑:我发现这可能是奥多的一个限制,他们解决了这个问题吗

在models.py的最新版本(于2015年8月4日星期二15:22:33+0200提交的版本)上应用以下修补程序:

换句话说,只需注释
openerp/models.py
文件的5900到5902行即可

当然,这种解决方案有一个很大的缺点-每次在使用的Odoo发行版中更新
models.py
文件时,都需要应用补丁


这也有相当大的风险——他们说Web客户端不能很好地处理onchange事件中更新的一个或多个字段。我现在没有发现任何问题,但我将继续测试我的Odoo开发安装…

我创建了对Odoo版本8的拉取请求

随着问题和此处提到的变化

    if field_name and not isinstance(field_name, list) and \
-                self._fields[field_name].type in ('one2many', 'many2many'):
+        if field_name and not isinstance(field_name, list):

这一限制存在于odoov8中的
@api.onchange
装饰器中。你用的是什么版本?我不知道OpenERP7是否有同样的限制。我想您可以使用一个链接来更新报价中销售订单行中的所有表格。我使用了odoov8,我已经尝试了@api.onchange和on_change属性方法。两者都不起作用。是的,我也在考虑,但这对用户来说是个麻烦。我想让它自动执行,有什么解决方法吗?我已经关注这个问题好几个月了,我不认为有一个简单的解决方案我不明白,这太简单了,他们可以在客户端做任何他们想做的事情后,把函数上的one2many字段当作从另一个字段调用。毕竟,我们希望在所有其他事情都做对之后执行on_更改?这可能是他们能解决的最简单的问题。似乎有人创造了一个惊人的,你是如何找到代码的?现在就这样吧。非常感谢。你看起来像个奥多专家,你能回答我的另一个问题吗?当然,在这句恭维话之后:)请检查另一个问题,看看我是否回答得很好。
    if field_name and not isinstance(field_name, list) and \
-                self._fields[field_name].type in ('one2many', 'many2many'):
+        if field_name and not isinstance(field_name, list):