TypeError(repr(o)+“不是JSON可序列化的”) - Odoo v8

时间:2016-10-31 17:54:12

标签: python json openerp odoo-8

我有这种方法,它要求在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

但是每当我从按钮调用它时,它就会抛出这个:

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")

我已阅读此answer

但是我仍然不确定,可能是因为domain我在这里工作了吗?

1 个答案:

答案 0 :(得分:2)

您在res中传递的域名必须是list tuple而不是list tuple string,请查看下面的代码:

@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,
    }