Openerp ODOV9在更改时覆盖旧api

Openerp ODOV9在更改时覆盖旧api,openerp,odoo-9,Openerp,Odoo 9,我想在res.partner模型中对字段parent\u id生成onchange事件。该字段已通过旧api具有onchange事件,因此我将其在XML上的值更改为on\u change=1,并添加了.py代码 def onchange_parent_id(self): self.category_id = self.parent_id.category_id super(res_partner, self).onchange_parent_id(self) 更新后,我打开联系

我想在res.partner模型中对字段parent\u id生成onchange事件。该字段已通过旧api具有onchange事件,因此我将其在XML上的值更改为on\u change=1,并添加了.py代码

def onchange_parent_id(self):
    self.category_id = self.parent_id.category_id
    super(res_partner, self).onchange_parent_id(self)
更新后,我打开联系人表单并更改家长id,一切正常,但当我按save时,错误发生

TypeError: cannot convert dictionary update sequence element #0 to a sequence
据我所知,这是因为create-other方法(_-fields\u-sync)也通过“旧式”调用onchange\u-parent\u-id方法

也许有人能给我建议如何解决这个问题


提前感谢

似乎
\u fields\u sync
使用
上下文=[partner.id]
调用
onchange\u parent\u id
,这就是转换错误的原因(api.py行756)

ODOO日志
警告…:合作伙伴:res.partner(93,)
api:756:context=[93]

Python测试

>>> from openerp.tools import frozendict
>>> context = [93]
>>> frozendict(context)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@api.model
@api.onchange('parent_id')
def onchange_parent_id_new(self):
  old_res = super(res_partner, self).onchange_parent_id(self.parent_id.id)
  if type(old_res) is dict and 'value' in old_res:
    for field, value in old_res.get('value').items():
      if hasattr(self, field):
        setattr(self, field, value)

  if self.parent_id:
      self.category_id = self.parent_id.category_id
<record id="view_partner_form_inherit" model="ir.ui.view">
    <field name="name">view.partner.form.inherit</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
    <field name="parent_id" position="replace">
        <field name="parent_id"/>
    </field>
    </field>
</record>
XML

>>> from openerp.tools import frozendict
>>> context = [93]
>>> frozendict(context)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@api.model
@api.onchange('parent_id')
def onchange_parent_id_new(self):
  old_res = super(res_partner, self).onchange_parent_id(self.parent_id.id)
  if type(old_res) is dict and 'value' in old_res:
    for field, value in old_res.get('value').items():
      if hasattr(self, field):
        setattr(self, field, value)

  if self.parent_id:
      self.category_id = self.parent_id.category_id
<record id="view_partner_form_inherit" model="ir.ui.view">
    <field name="name">view.partner.form.inherit</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
    <field name="parent_id" position="replace">
        <field name="parent_id"/>
    </field>
    </field>
</record>

view.partner.form.inherit
合伙人

似乎
\u fields\u sync
使用
上下文=[partner.id]
调用
onchange\u parent\u id
,这就是转换错误的原因(api.py第756行)

ODOO日志
警告…:合作伙伴:res.partner(93,)
api:756:context=[93]

Python测试

>>> from openerp.tools import frozendict
>>> context = [93]
>>> frozendict(context)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@api.model
@api.onchange('parent_id')
def onchange_parent_id_new(self):
  old_res = super(res_partner, self).onchange_parent_id(self.parent_id.id)
  if type(old_res) is dict and 'value' in old_res:
    for field, value in old_res.get('value').items():
      if hasattr(self, field):
        setattr(self, field, value)

  if self.parent_id:
      self.category_id = self.parent_id.category_id
<record id="view_partner_form_inherit" model="ir.ui.view">
    <field name="name">view.partner.form.inherit</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
    <field name="parent_id" position="replace">
        <field name="parent_id"/>
    </field>
    </field>
</record>
XML

>>> from openerp.tools import frozendict
>>> context = [93]
>>> frozendict(context)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@api.model
@api.onchange('parent_id')
def onchange_parent_id_new(self):
  old_res = super(res_partner, self).onchange_parent_id(self.parent_id.id)
  if type(old_res) is dict and 'value' in old_res:
    for field, value in old_res.get('value').items():
      if hasattr(self, field):
        setattr(self, field, value)

  if self.parent_id:
      self.category_id = self.parent_id.category_id
<record id="view_partner_form_inherit" model="ir.ui.view">
    <field name="name">view.partner.form.inherit</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
    <field name="parent_id" position="replace">
        <field name="parent_id"/>
    </field>
    </field>
</record>

view.partner.form.inherit
合伙人

我重写了函数:
@api.onchange('parent_id')def onchange_parent_id(self,parent_id=None):old_res=super(res_partner,self)。onchange_parent_id(self.parent_id.id)如果type(old_res)是dict,old_res.有_key('value'):对于字段,old_res.get('value')。items():如果hasattr(self,field):如果self.parent_id:self.category_id=self.parent_id.category_id返回{'value':{}
error
TypeError:onchange_parent_id()最多接受2个参数(给定6个参数)
@Zilvinas您需要使用
@API.model
将旧的API调用转换为新的API签名。检查我的更新,我希望它会有用。谢谢,这个新函数名的解决方案起作用。我已经重写了函数:
@API.onchange('parent_id')def onchange_parent_id(self,parent_id=None):old_res=super(res_partner,self).onchange_parent_id(self.parent_id.id)如果type(old_res)是dict并且old_res.有_key('value'):对于字段,old_res.get('value').items():if hasattr(self,field):setattr(self,field,value)如果self.parent\u id:self.category\u id=self.parent\u id.category\u id返回{'value':{}
error
TypeError:onchange\u parent\u id()最多接受2个参数(给定6个)
@Zilvinas您需要使用
@API.model
将旧的API调用转换为新的API签名。请检查我的更新,我希望它会有用。谢谢,这个新函数名的解决方案正在工作。