我想在res.partner模型中使用字段parent_id上的make onchange事件。这个字段已经有旧api的onchange事件,所以我把它在XML上的值改为on_change = 1并添加了.py代码
def onchange_parent_id(self):
self.category_id = self.parent_id.category_id
super(res_partner, self).onchange_parent_id(self)
更新后,然后我打开联系表单并更改parent_id,一切正常,但是当我按保存错误发生时
TypeError: cannot convert dictionary update sequence element #0 to a sequence
因为据我所知,因为创建其他方法(_fields_sync)也会因为#old旧样式调用onchange_parent_id methot。
也许有人可以建议我如何解决这个问题。
提前致谢
答案 0 :(得分:0)
似乎_fields_sync
使用onchange_parent_id
调用context=[partner.id]
,这是转换错误的存在(api.py第756行)。
ODOO LOG :
警告......:伙伴:res.partner(93,)
API:756:上下文= [93]
Python测试:
>>> from openerp.tools import frozendict
>>> context = [93]
>>> frozendict(context)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError:无法将字典更新序列元素#0转换为序列
您可以移除旧的onchange event
并创建一个新的onchange_parent_id_new
,而无需覆盖onchange_parent_id
方法。
Python :
@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
XML :
<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>