Odoo工作者为全局变量提供错误

时间:2016-12-07 12:17:48

标签: openerp odoo-8 gunicorn worker

我开发了一些具有一些全局变量的模块。 该模块正常工作,正常执行odoo。 但是在服务器之一,如果我们通过

更改odoo工作人员
  

- 工人= 5

然后在fields_view_get方法中,当我尝试访问该值时,我没有得到该值,并且它生成错误,该变量未定义,或者有时没有类型没有属性。

Gunicorn + Odoo也出现了同样的问题。

请提供建议或参考。 所有建议表示赞赏。

代码:

@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
    global lims_config
    res = super(lims_dashboard_graph, self).fields_view_get(
        view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
    self = self.with_context(self._context)
    if view_type == 'graph' and lims_config.get('graph_view') == 'bar':
        print "\n BAR---Context--", self._context
        doc = etree.XML(res['arch'])
        node = doc.xpath("//field[@name='date']")[0]
        if lims_config.get('interval'):
            node.set('interval', lims_config.get('interval'))
        res['arch'] = etree.tostring(doc)
    return res

1 个答案:

答案 0 :(得分:1)

您的python类仅由框架实例化一次,并且相同的实例用于所有数据库访问。在Odoo中使用类变量时要特别注意,尤其是在为它们赋值时。

另外,请记住,您的类实例可能会被垃圾清理并重新初始化。

当你使用worker时,会产生更多的python进程,因此在你不知道是否进行了适当的初始化的情况下创建了更多类的实例。

结论:在Odoo中使用全局变量,总会有更好的方法。例如,您可以使用odoo提供的字段之一来保存您要使用的一些数据。可能是char或text字段,只存储在数据库中供您使用。