为什么Odoo在更新request.session时给出PicklingError

时间:2016-12-10 09:27:21

标签: python-2.7 openerp pickle odoo-8

为什么它给我这样的错误我只是更新简单的字典。 没有request.session它工作正常,但它在更新request.session时生成此错误。

   @api.multi
    def graph_view(self):
        vals = {}
        if self.x_axis and self.y_axis and self.range_period and self.range_selection:
            vals.update({'id': self.id,
                         'x_axis': self.x_axis,
                         'y_axis': self.y_axis,
                         'range_period': self.range_period,
                         'range_selection': self,
                         'graph_type': 'pie',
                         'model': self
        else:
            raise Warning('Please check the graph') 
        request.session.update(vals)
        res = self.env['ir.model.data'].get_object_reference('pan_pos', 'graph_form_view')
        return {
            'view_type': 'form',
            'view_mode': 'form',
            'view_id': res[1],
            'res_model': 'report.sales',
            'type': 'ir.actions.act_window',
            'target': 'current'
        }

错误日志:

2016-12-10 09:16:09,960 31071 ERROR pan_28_11 werkzeug: Error on request:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
    execute(self.server.app)
  File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 168, in execute
    application_iter = app(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/service/server.py", line 291, in app
    return self.app(e, s)
  File "/home/acespritech/ERP/odoo_8/openerp/service/wsgi_server.py", line 216, in application
    return application_unproxied(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/service/wsgi_server.py", line 202, in application_unproxied
    result = handler(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/http.py", line 1292, in __call__
    return self.dispatch(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/http.py", line 1266, in __call__
    return self.app(environ, start_wrapped)
  File "/usr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
    return self.app(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/http.py", line 1266, in __call__
    return self.app(environ, start_wrapped)
  File "/usr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
    return self.app(environ, start_response)
  File "/home/acespritech/ERP/odoo_8/openerp/http.py", line 1444, in dispatch
    response = self.get_response(httprequest, result, explicit_session)
  File "/home/acespritech/ERP/odoo_8/openerp/http.py", line 1389, in get_response
    self.session_store.save(httprequest.session)
  File "/usr/lib/python2.7/dist-packages/werkzeug/contrib/sessions.py", line 244, in save
    dump(dict(session), f, HIGHEST_PROTOCOL)
  File "/usr/lib/python2.7/pickle.py", line 1376, in dump
    Pickler(file, protocol).dump(obj)
  File "/usr/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.7/pickle.py", line 655, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib/python2.7/pickle.py", line 687, in _batch_setitems
    save(v)
  File "/usr/lib/python2.7/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib/python2.7/pickle.py", line 396, in save_reduce
    save(cls)
  File "/usr/lib/python2.7/pickle.py", line 300, in save
    self.save_global(obj)
  File "/usr/lib/python2.7/pickle.py", line 754, in save_global
    (obj, module, name))
PicklingError: Can't pickle <class 'openerp.api.sales'>: it's not found as openerp.api.sales

请帮我解决。 感谢。

1 个答案:

答案 0 :(得分:0)

字典

  

<强>瓦尔斯

包含错误的值,self给出了模型对象,如果没有找到记录则只给出对象模型,并且由于pickle对象不能支持模型类型对象而给出了pickle错误。

通过类型转换将字符串转换为对象模型。解决错误。