TypeError(repr(o) + “ is not JSON serializable”) - Odoo v8

故事扮演 提交于 2019-12-12 02:46:13

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!