问题
I have this method, which calls for a document associated with an invoice on Odoo v8.
@api.multi
def button_generate_wh_doc(self):
context = self._context
partner = self.env['res.partner']
res = {}
for inv in self:
view_id = self.env['ir.ui.view'].search([
('name', '=', 'account.invoice.wh.iva.customer')])
context = self.env.context.copy()
context.update({'domain':[(
('invoice_id','=',inv.id),
('type','=',inv.type),
('default_partner_id','=', partner._find_accounting_partner(
inv.partner_id).id),
('default_name' ,'=', inv.name or inv.number),
('view_id' ,'=', view_id))]})
res = {
'name': _('Withholding vat customer'),
'type': 'ir.actions.act_window',
'res_model': 'account.wh.iva',
'view_type': 'form',
'view_id': False,
'view_mode': 'form',
'nodestroy': True,
'target': 'current',
'domain': "[('type', '=', '" + inv.type + "')]",
'context': context
}
return res
But everytime I call this from button it throws me this:
Traceback (most recent call last):
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 544, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 595, in dispatch
return self._json_response(result)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 533, in _json_response
body = simplejson.dumps(response)
File "/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py", line 366, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 269, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 348, in iterencode
return _iterencode(o, 0)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
I've read this answer
But I'm still not sure about it, it could be because of the domain
where I'm working this on?
回答1:
The domain you passing in res
has to be list
of tuple
and not list
of tuple
of string
, check below code :
@api.multi
def button_generate_wh_doc(self):
context = self._context
partner = self.env['res.partner']
res = {}
for inv in self:
view_id = self.env['ir.ui.view'].search([
('name', '=', 'account.invoice.wh.iva.customer')])
context = self.env.context.copy()
context.update({
'domain':[
('invoice_id','=',inv.id),
('type','=',inv.type),
('default_partner_id','=', partner._find_accounting_partner(inv.partner_id).id),
('default_name' ,'=', inv.name or inv.number),
('view_id' ,'=', view_id[0].id)
]
})
return {
'name': _('Withholding vat customer'),
'type': 'ir.actions.act_window',
'res_model': 'account.wh.iva',
'view_type': 'form',
'view_id': False,
'view_mode': 'form',
'target': 'current',
'domain': [('type', '=', inv.type )],
'context': context,
}
来源:https://stackoverflow.com/questions/40347743/typeerrorrepro-is-not-json-serializable-odoo-v8