2016-10-31 2 views
0

У меня есть этот метод, который вызывает документ, связанный со счетом на Odoo v8.TypeError (repr (o) + "не является сериализуемым JSON") - 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

Привет, в нем говорится: openerp.http: Исключение во время обработки запроса JSON. – NeoVe

+1

Итак, он не показывает вам исключения, но показывает вам трассировку? В самом деле? Если это так, то напишите ошибку. –

ответ

1

домен вы переходящая в 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, 
    } 
+0

Привет, я обновил модуль с помощью вашего кода, я вижу, что он не возвращает строку, но тот же ошибка происходит на самом деле :(, я не знаю, действительно ли это может быть ошибкой, как указал другой пользователь – NeoVe

+1

@NeoVe: вы передаете весь объект вида в контексте, а объект просмотра не является сериализуемым объектом, в view_id вам нужно только пройти id view и New API вернут набор записей при поиске. Обновил мой ответ для этого. –

+0

WoW, ультра потрясающий, спасибо вам большое много – NeoVe