UnboundLocalError: local variable 'context' referenced before assignment - Odoov8 to Odoov10 community

UnboundLocalError: local variable 'context' referenced before assignment - Odoov8 to Odoov10 community

我有这个方法我已经从 v8 迁移到 v10 社区:

@api.model
def create(self, vals):
    """ To create a new record,
    adds a Boolean field to true
    indicates that the partner is a company
    """
    if context is None:
        context = {}
    context.update({'create_company': True})
    return super(ResUsers, self).create(vals) 

@api.multi
def write(self, values): 
    """ To write a new record,
    adds a Boolean field to true
    indicates that the partner is a company
    """
    context = dict(context or {})
    context.update({'create_company': True})
    return super(ResUsers, self).write(values) 

当我点击这些布尔值时,它抛出了这个:

Traceback (most recent call last):
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 675, in dispatch
result = self._call_function(**self.params)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 331, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/service/model.py", line 119, in wrapper
return f(dbname, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 324, in checked_call
result = self.endpoint(*a, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 933, in __call__
return self.method(*args, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 504, in response_wrap
response = f(*args, **kw)
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 862, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 854, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 681, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 672, in call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/model/res_users.py", line 52, in write
context = dict(context or {})
UnboundLocalError: local variable 'context' referenced before assignment

我已将 context = context {} 更改为 context = dict(context or {}),但我不确定是否需要它。

有什么想法吗?

只有您可以通过 self._context 或 self.env.context 访问上下文。但是这里我认为你定义错误

您可以使用以下语法编写创建和写入方法。

@api.model
def create(self, vals):
    """ To create a new record,
    adds a Boolean field to true
    indicates that the partner is a company
    """
    context=dict(self._context or {})
    context.update({'create_company': True})
    return super(ResUsers, self.with_context(context)).create(vals)

@api.multi
def write(self, values): 
    """ To write a new record,
    adds a Boolean field to true
    indicates that the partner is a company
    """
    context=dict(self._context or {})
    context.update({'create_company': True})
    return super(ResUsers, self.with_context(context)).write(vals)

Using with_context you can pass context to super method

Using self._context you will get context, By default context is frozendict. you must convert in dict other wise you will get error.

When you are calling super method using with_context,At that time you must pass existing context as well other wise super method will not get all child methods context.