Python3 函数缺少 3 个必需的位置参数
Python3 Function missing 3 required positional arguments
我尝试在odoo 14中写一个复制函数
但我得到以下错误:
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'
我已经搜索了解决方案,但是无法复制成功
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 ===')
我在单击“复制”按钮时调用此函数。
enter image description here
<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>
我为此苦苦挣扎了一段时间。任何形式的帮助将不胜感激!
使用新的 ORM API。为此,删除函数签名 - cr, uid, ids, context=None
旧api
def afun(self, cr, uid, ids, context=None):
新建API
def afun(self):
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 指定要写入 默认值 的确切对象。
我尝试在odoo 14中写一个复制函数
但我得到以下错误:
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'
我已经搜索了解决方案,但是无法复制成功
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 ===')
我在单击“复制”按钮时调用此函数。 enter image description here
<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>
我为此苦苦挣扎了一段时间。任何形式的帮助将不胜感激!
使用新的 ORM API。为此,删除函数签名 - cr, uid, ids, context=None
旧api
def afun(self, cr, uid, ids, context=None):
新建API
def afun(self):
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 指定要写入 默认值 的确切对象。