python - 类型错误 : _get_loc_req() takes at least 3 arguments (1 given) - Odoo v8 to Odoo v10 community

标签 python odoo odoo-10

我有这个方法:

@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是我添加的,因为这个方法对记录进行操作,但也许它是不正确的?

最佳答案

按钮方法应如下所示:

@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

关于python - 类型错误 : _get_loc_req() takes at least 3 arguments (1 given) - Odoo v8 to Odoo v10 community,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755176/

相关文章:

python - 使用不同颜色的切片图 - 手动重新着色条形

css - Odoo 10 : How to increase the field width?

docker - 将Docker容器及其数据库容器移动到另一台服务器

Odoo - 在 Many2one 中过滤特定组的用户

Python 和 CGI​​ : Prevent resending form data upon refreshing

python - Matplotlib 图转 PDF 无需保存

python - 如何在pythonanywhere中使用flask连接数据库

odoo - 在 openerp 中确认一个条件对话框和动态文本

odoo - TreeView 中的总和 odoo 9

javascript - JS odoo 10 中的函数返回 `undefined`