Odoo Help


TypeError: unhashable type: 'list'

samir Guesmi
on 5/14/13, 1:10 PM 10,662 views

hi all ,

i am trying to add a new fields (many to many fields to product.product

'myField' : fields.many2many('myclass.myclass', string='MY FIELD', selection=_sel_func_field),

and my field is a selection from other table.

but when i try to add new product .

this message appear

Client Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/openerp/addons/web/http.py", line 204, in dispatch response["result"] = method(self, *self.params) File "/usr/lib/pymodules/python2.7/openerp/addons/web/controllers/main.py", line 1129, in call_kw return self._call_kw(req, model, method, args, kwargs) File "/usr/lib/pymodules/python2.7/openerp/addons/web/controllers/main.py", line 1121, in _call_kw return getattr(req.session.model(model), method)(args, *kwargs) File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 43, in proxy result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw) File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 31, in proxy_method result = self.session.send(self.service_name, method, args) File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 104, in send raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info) Server Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 90, in send return openerp.netsvc.dispatch_rpc(service_name, method, args) File "/usr/lib/pymodules/python2.7/openerp/netsvc.py", line 293, in dispatch_rpc result = ExportService.getService(service_name).dispatch(method, params) File "/usr/lib/pymodules/python2.7/openerp/service/web_services.py", line 626, in dispatch res = fn(db, uid, *params) File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 188, in execute_kw return self.execute(db, uid, obj, method, *args, *kw or {}) File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 131, in wrapper return f(self, dbname, args, *kwargs) File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 197, in execute res = self.execute_cr(cr, uid, obj, method, args, *kw) File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 185, in execute_cr return getattr(object, method)(cr, uid, args, *kw) File "/usr/lib/pymodules/python2.7/openerp/addons/mail/mail_thread.py", line 242, in create thread_id = super(mail_thread, self).create(cr, uid, values, context=context) File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4429, in create self._check_selection_field_value(cr, user, field, vals[field], context=context) File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 2815, in _check_selection_field_value elif val in dict(self._columns[field].selection(self, cr, uid, context=context)): TypeError: unhashable type: 'list'*


Serpent Consulting Services Pvt. Ltd.

--Serpent Consulting Services Pvt. Ltd.--
| 6 6 8
Gandhinagar, India
--Serpent Consulting Services Pvt. Ltd.--

Serpent Consulting Services Pvt. Ltd. Your Odoo/OpenERP Solution, just an email away!

Serpent Consulting Services Pvt. Ltd.
On 5/24/13, 11:19 AM

Hello Samir,

Your are adding many2many field in a wrong way.

The syntax to add a many2many field is as following:

'Field_name': fields.many2many('Object', 'rel_table','Field1','Field2','String')


  • obj: _name of destination object. Bidirectional multiple relationship between objects.(required)
  • rel: relationship table to map the two fields together.(required)
  • field1: name of field in rel table storing the id of the current object (required)
  • field2: name of field in rel table storing the id of the target object (required)
  • String: field label

For Example,


Now, In version 7.0 onward you can add the many2many field without 'rel_table' and 'fields'.



For Example:


If you want use selection than your "_sel_func_field" must return list.

Hope now you will get whole concept of many2many field.


thanks , i had solved this . thanks a lot

samir Guesmi
on 5/24/13, 1:59 PM
samir Guesmi
On 5/14/13, 2:01 PM

thanks for your replay ,

import logging import string import datetime import re

from osv import osv, fields from tools.misc import ustr from tools.translate import _

class mymodule_product_field(osv.osv): _name = 'mymodule.product.field' _order = 'name' _columns = { 'product_id' : fields.many2many('product.product', id1='field_id' ,id2='product_id'), 'id': fields.char('id', size=16 ), 'name': fields.char('Name', size=16 ),



def _sel_func_field(self, cr, uid, context=None): obj = self.pool.get('mymodule.product.field') ids = obj.search(cr, uid, []) res = obj.read(cr, uid, ids, ['name', 'id'], context) res = [(r['id'], r['name']) for r in res] return res

class product_product(osv.osv): _inherit = 'product.product' _name = 'product.product'

_columns = {
    'myfield' : fields.many2many('mymodule.product.field', id1='product_id', id2='field_id' , string='MY FIELD', selection=_sel_func_field),



Brett Lehrer

--Brett Lehrer--

| 5 5 8
Milwaukee, United States
--Brett Lehrer--
Director of IT and open source enthusiast.
Brett Lehrer
On 5/14/13, 1:19 PM

It looks like you're confusing some of the syntax for creating a many2many field. You need at least 5 arguments:

  • The other object to link to
  • The name of your new intermediary table to map the two together
  • The name of the current object's id column (in the database itself)
  • The name of the target object's id column (in the database itself)
  • The name of the field

A selection field is completely different and just allows picking from a predefined list of options.

Refer to doc.openerp.com/trunk for more explanation.



--Borni DHIFI--
| 6 8 9
Tunis, Tunisia
--Borni DHIFI--

Techno Functional Consultant Odoo(OpenERP) 


Skype : dhifi.borni

On 5/14/13, 1:18 PM


Please post your code so we can help you.

see syntaxe many2many :

fields.many2many doc V7.

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

0 follower(s)


Asked: 5/14/13, 1:10 PM
Seen: 10662 times
Last updated: 3/16/15, 8:10 AM