【问题标题】:TypeError(repr(o) + " is not JSON serializable") - Odoo v8TypeError(repr(o) + "不是 JSON 可序列化") - Odoo v8
【发布时间】:2016-10-31 17:54:11
【问题描述】:

我有这个方法,它需要与 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

【问题讨论】:

  • 缺少异常最重要的部分:异常信息是什么?
  • 嗨,它说:openerp.http:JSON 请求处理期间出现异常。
  • 所以,它不会向您显示异常,但会向您显示回溯?真的吗?如果是这种情况,请提交错误。
  • 是的,就这样......好吧,我会这样做
  • 回溯表明您有一些对象正在尝试编码为 JSON,但 simplejson 库不知道如何处理该特定(类型)对象。

标签: python json openerp odoo-8


【解决方案1】:

您传入res 的域必须是listtuple 而不是listtuplestring,检查下面的代码:

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

【讨论】:

  • 嗨,我已经用你的代码更新了模块,我看到它没有返回字符串,但实际上发生了同样的错误:(,我不知道这是否真的是一个错误正如另一位用户指出的那样
  • @NeoVe :您在上下文中传递整个视图对象,并且视图对象不是可序列化的对象,在 view_id 中您只需要传递视图的 id,新 API 将在您搜索时返回记录集。更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2017-10-24
  • 2016-08-02
  • 2019-02-08
  • 2013-05-11
  • 2014-08-13
相关资源
最近更新 更多