Openerp ODOV9在更改时覆盖旧api
我想在res.partner模型中对字段parent\u id生成onchange事件。该字段已通过旧api具有onchange事件,因此我将其在XML上的值更改为on\u change=1,并添加了.py代码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) 更新后,我打开联系
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':{}
errorTypeError: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':{}
errorTypeError:onchange\u parent\u id()最多接受2个参数(给定6个)
@Zilvinas您需要使用@API.model
将旧的API调用转换为新的API签名。请检查我的更新,我希望它会有用。谢谢,这个新函数名的解决方案正在工作。