当执行onchange ...()函数时,我收到错误:
File "/opt/odoo/odoo/openerp/models.py", line 5652, in _onchange_eval
result.setdefault('domain', {}).update(method_res['domain'])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
这是我的代码。我认为错误与域有关:
def onchange_template_id(self, cr, uid, ids, id, context=None):
print "\n\n on change template global_template_id ", global_template_id
bom_ids = []
pd_ids = []
product_complete = []
ptemplid = global_template_id
mbl_obj = self.pool.get('mrp.bom.line')
id_s = mbl_obj.search(cr, uid, [('product_id', '=', ptemplid)])
for rec in mbl_obj.browse(cr, uid, id_s, context=context):
bom_ids.append(rec.bom_id.id)
mb_obj = self.pool.get('mrp.bom')
for rec in mb_obj.browse(cr, uid, bom_ids, context=context):
pd_ids.append(rec.product_id.id)
pp_obj = self.pool.get('product.product')
for rec in pp_obj.browse(cr, uid, pd_ids, context=context):
product_complete.append('['+ str(rec.default_code) + ']'+ ' ' + str(rec.name_template))
print "\n\n bom_ids ", bom_ids
domain = [('id','=',bom_ids)]
return {
'type': 'ir.actions.act_window',
'name': _('BOM'),
'res_model': 'mrp.bom',
'view_mode': 'tree',
'target': 'new',
'domain': domain,
}
答案 0 :(得分:3)
bom_ids = []
这是一个列表,意味着将有更多的值。并且您传递的域名是
[(' ID',' =',bom_ids)]
所以如果我们采取小例子,那么考虑bom_ids = [1,2,3];那么域名将是
domain = [(' id',' =',bom_ids)] - > [(' ID',' =',[1,2,3])]
根据SQL概念,这是错误的。 id = 将始终具有单值。对于多个值,您应该使用 或喜欢。
您可以尝试的解决方案是
domain = [(' id',' in',bom_ids)]
希望这会对你有所帮助。
感谢。