首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3函数缺少3个必需的位置参数

Python3函数缺少3个必需的位置参数
EN

Stack Overflow用户
提问于 2021-04-27 02:45:46
回答 1查看 1.2K关注 0票数 1

我试图用odoo 14编写一个复制函数。

但我得到了以下错误:

代码语言:javascript
复制
  Odoo Server Error
  Traceback (most recent call last):
    File "/vagrant/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
      result = request.dispatch()
    File "/vagrant/odoo/odoo/http.py", line 682, in dispatch
      result = self._call_function(**self.params)
    File "/vagrant/odoo/odoo/http.py", line 358, in _call_function
      return checked_call(self.db, *args, **kwargs)
    File "/vagrant/odoo/odoo/service/model.py", line 94, in wrapper
      return f(dbname, *args, **kwargs)
    File "/vagrant/odoo/odoo/http.py", line 346, in checked_call
      result = self.endpoint(*a, **kw)
    File "/vagrant/odoo/odoo/http.py", line 911, in __call__
      return self.method(*args, **kw)
    File "/vagrant/odoo/odoo/http.py", line 530, in response_wrap
      response = f(*args, **kw)
    File "/vagrant/odoo/addons/web/controllers/main.py", line 1363, in call_button
      action = self._call_kw(model, method, args, kwargs)
    File "/vagrant/odoo/addons/web/controllers/main.py", line 1351, in _call_kw
      return call_kw(request.env[model], method, args, kwargs)
    File "/vagrant/odoo/odoo/api.py", line 396, in call_kw
      result = _call_kw_multi(method, model, args, kwargs)
    File "/vagrant/odoo/odoo/api.py", line 383, in _call_kw_multi
      result = method(recs, *args, **kwargs)
  Exception

  The above exception was the direct cause of the following exception:

  Traceback (most recent call last):
    File "/vagrant/odoo/odoo/http.py", line 638, in _handle_exception
      return super(JsonRequest, self)._handle_exception(exception)
    File "/vagrant/odoo/odoo/http.py", line 314, in _handle_exception
      raise exception.with_traceback(None) from new_cause
  TypeError: copy_func() missing 3 required positional arguments: 'cr', 'uid', and 'ids'

我一直在寻找解决方案,但它无法成功地复制。

代码语言:javascript
复制
def copy_func(self, cr, uid, ids, context=None):
    _logger.info('=== copy_func start ===')

    for record in self.browse(cr, uid, ids):
        formbas_obj = self.pool.get('com.formmst')
        defaults = {
            'form_no': record.form_no,
            'com_orgbas_id': record.com_orgbas_id.id if record.com_orgbas_id else False,
        }
        formbas_obj.copy(cr, uid, record.com_formmst_id.id, defaults)
    _logger.info('=== copy_func end ===')

单击“复制”按钮时调用此函数。在这里输入图像描述

代码语言:javascript
复制
<record id="form_com_formbas_copy_wizard" model="ir.ui.view">
    <field name="name">form.com.formbas.copy.wizard</field>
    <field name="model">com.formbas.copy.wizard</field>
    <field name="arch" type="xml">
        <form>
            <group col="4">
                <field name="com_formmst_id"/>
                <newline/>
                <field name="form_no"/>
            </group>
            <footer>
                <button string="Copy" name="copy_func" type="object" class="oe_highlight"/>
                or
                <button string="Cancel" special="cancel" type="object" class="oe_link"/>
            </footer>
        </form>
    </field>
</record>

我为此挣扎了很长一段时间。任何形式的帮助都将是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 15:45:58

使用。为此,删除函数签名- cr、uid、id、context=None

旧api

代码语言:javascript
复制
def afun(self, cr, uid, ids, context=None):

新API

代码语言:javascript
复制
def afun(self):
代码语言:javascript
复制
def copy_func(self):
    _logger.info('=== copy_func start ===')

    for record in self:
        formbas_obj = self.env['com.formmst'].search(['id', '=', 121])
        defaults = {
            'form_no': record.form_no,
            'com_orgbas_id': record.com_orgbas_id.id if record.com_orgbas_id else False,
        }
        formbas_obj.write(defaults)
    _logger.info('=== copy_func end ===')

在函数中,为formbas_obj指定确切的对象,以便将默认值写入。

REference

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67276315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档