This question has been flagged
1 Reply
4044 Views

I have two model:

class 1st(models.Model):
_name = '1stmodel'

scode = fields.Char('Code', size=3, required=True)
writable_field = fields.Char('copia_campo')

and:

class 2nd(models.Model):

_name = '2ndmodel'
_inherits = {'1stmodel': 'id_1stmodel'}

id_1stmodel = fields.Many2one('1stmodel', 'Code', widget="many2one_list")
client = fields.Char(string='Client', size=100, required=True)

@api.one
def write_method(self):
modify_field = self.env['1stmodel'].search([('id','=',self.id_1stmodel)])
modify_field.write({'writable_field': "ok"})

I have put a button in the second view to call the write method:

<record id="view_2nd_form" model="ir.ui.view">
<field name="name">2nd.form.view</field>
<field name="model">2ndmodel</field>
<field name="arch" type="xml">
<form string="Bridge" duplicate="false">
<header>
<group>
<button name="act_finish" type="object" string="modify 1stmodel"/>
</group>
</header>
<group>
<field name="id_1stmodel"/>
<field name="client"/>
</group>
</form>
</field>
</record>

When I push on the button, I get this error:

Odoo Server Error

Traceback (most recent call last):
File "/home/odoo/http.py", line 530, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/odoo/http.py", line 567, in dispatch
result = self._call_function(**self.params)
File "/home/odoo/http.py", line 303, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/odoo/service/model.py", line 113, in wrapper
return f(dbname, *args, **kwargs)
File "/home/odoo/http.py", line 300, in checked_call
return self.endpoint(*a, **kw)
File "/home/odoo/http.py", line 796, in __call__
return self.method(*args, **kw)
File "/home/odoo/http.py", line 396, in response_wrap
response = f(*args, **kw)
File "/home/odoo/addons/web/controllers/main.py", line 953, in call_button
action = self._call_kw(model, method, args, {})
File "/home/odoo/addons/web/controllers/main.py", line 941, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/home/odoo/api.py", line 241, in wrapper
return old_api(self, *args, **kwargs)
File "/home/odoo/addons/mymodule/inserimento.py", line 315, in act_finish
assignment_ids = assignment_obj.search(cr, uid, [('id', '=', record.id_tbl_contratto)], context=context)
File "/home/odoo/api.py", line 241, in wrapper
return old_api(self, *args, **kwargs)
File "/home/odoo/models.py", line 1637, in search
return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
File "/home/odoo/api.py", line 241, in wrapper
return old_api(self, *args, **kwargs)
File "/home/odoo/models.py", line 4587, in _search
query = self._where_calc(cr, user, args, context=context)
File "/home/odoo/api.py", line 241, in wrapper
return old_api(self, *args, **kwargs)
File "/home/odoo/models.py", line 4412, in _where_calc
where_clause, where_params = e.to_sql()
File "/home/odoo/osv/expression.py", line 1245, in to_sql
q, p = self.__leaf_to_sql(leaf)
File "/home/odoo/osv/expression.py", line 1112, in __leaf_to_sql
"Invalid value %r in domain term %r" % (right, leaf)
AssertionError: Invalid value 1stmodel(6,) in domain term ('id', '=', 1stmodel(6,))

Could anyone tell me where is my error, please?

Thanks !

Avatar
Discard
Best Answer

Hello,

Try:

modify_field = self.env['1stmodel'].search([('id','=',self.id_1stmodel.id)])

Also:

you should no search for ID as you already have recordset (browse record). So you can use it directly.

Ex, you can directly use:

self.id_1stmodel.write({'writable_field': "ok"})

 

Avatar
Discard
Author

It works! Thank you very much.