2017-03-13 62 views
1

我有这样的方法:类型错误:_get_loc_req()至少需要3个参数(1给出) - Odoo的V8 Odoo V10社区

@api.multi 
def _get_loc_req(self, cr, uid, context=None): 
    """Get if a field is required or not by a Localization 
    @param uid: Integer value of the user 
    """ 
    context = context or {} 
    res = True 
    ru_brw = self.pool.get('res.users').browse(
     cr, uid, uid, context=context) 
    rc_obj = self.pool.get('res.company') 
    rc_brw = rc_obj.browse(cr, uid, ru_brw.company_id.id, context=context) 

    if rc_brw.country_id and rc_brw.country_id.code == 'VE' and \ 
      rc_brw.printer_fiscal: 
     res = False 
    return res 

每次我点击它要求该功能的按钮,它抛出我这个:

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 679, in call_kw 
return call_kw_model(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 664, in call_kw_model 
result = method(recs, *args, **kwargs) 
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/account/models/account_invoice.py", line 342, in create 
invoice = super(AccountInvoice, self.with_context(mail_create_nolog=True)).create(vals) 
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/mail/models/mail_thread.py", line 227, in create 
thread = super(MailThread, self).create(values) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 3778, in create 
vals = self._add_missing_default_values(vals) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 1618, in _add_missing_default_values 
defaults = self.default_get(list(missing_defaults)) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 1101, in default_get 
defaults[name] = field.default(self) 
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/model/invoice.py", line 61, in <lambda> 
default=lambda s: s._get_loc_req(), 
TypeError: _get_loc_req() takes at least 3 arguments (1 given) 

正如我所说,我将一些模块从v8迁移到v10社区,我是否也应该改变参数?除了添加正确的装饰器?

装饰者@api.multi是我添加的,因为这种方法在记录上操作,但也许这是不正确的?

回答

1

按钮的方法应该是这样的:

@api.multi 
def my_method(self): 
    # my logic 
    return True 

没有必要用新的API来处理数据库游标,记录ID,用户ID和“手动”上下文了。


对于旧的API,您的方法应该也失败了,或者上下文中填入了id。它应该看起来像:

def _get_loc_req(self, cr, uid, ids, context=None): 

您刚才错过了ids

+0

这是我需要了解在新的API,哈哈,真棒!非常感谢你 – NeoVe

相关问题