错误:字典更新序列元素#0的长度为3; 2是必需的

时间:2014-12-17 18:17:57

标签: python openerp odoo

当执行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,
               }

1 个答案:

答案 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)]

希望这会对你有所帮助。

感谢。