【问题标题】:TypeError: write() got multiple values for keyword argument 'context'TypeError:write() 为关键字参数“上下文”获取了多个值
【发布时间】:2016-03-17 14:09:08
【问题描述】:

我正在使用新的 API,我想在单击向导的按钮后更改状态,但每次单击按钮时都会返回错误:

TypeError: write() got multiple values for keyword argument 'context'

追溯:

Traceback (most recent call last):
  File "/home/workspace/odoo8/openerp/http.py", line 537, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/workspace/odoo8/openerp/http.py", line 574, in dispatch
    result = self._call_function(**self.params)
  File "/home/workspace/odoo8/openerp/http.py", line 310, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/workspace/odoo8/openerp/service/model.py", line 118, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/workspace/odoo8/openerp/http.py", line 307, in checked_call
    return self.endpoint(*a, **kw)
  File "/home/workspace/odoo8/openerp/http.py", line 803, in __call__
    return self.method(*args, **kw)
  File "/home/workspace/odoo8/openerp/http.py", line 403, in response_wrap
    response = f(*args, **kw)
  File "/home/workspace/odoo8/addons/web/controllers/main.py", line 948, in call_button
    action = self._call_kw(model, method, args, {})
  File "/home/workspace/odoo8/addons/web/controllers/main.py", line 936, in _call_kw
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
  File "/home/workspace/odoo8/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/workspace/odoo8/openerp/api.py", line 399, in old_api
    result = method(recs, *args, **kwargs)
  File "/home/workspace/odoo8/custom_addons/my_module/models/test_module.py", line 14, in action_credit
    sale_order.write(sale_id,{'state': 'order_confirm'})
  File "/home/workspace/odoo8/openerp/api.py", line 266, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/workspace/odoo8/openerp/api.py", line 592, in new_api
    result = method(self._model, cr, uid, self.ids, *args, **old_kwargs)
TypeError: write() got multiple values for keyword argument 'context'

.py 文件:

from openerp.osv import orm
from openerp import models, api, _ 

class TestOverride(models.TransientModel):
    _name = 'test.override'

    @api.multi
    def action_override(self):
        sale_order = self.env['sale.order']
        sale_id = self._context['sale_id']
        sale_order.write(sale_id,{'state': 'order_confirm'})
        return True

class sale_order(models.Model):
    _inherit = "sale.order"

    @api.multi
    def action_button_confirm(self):
        for order_id in self:
            #
                if condition:
                    return {
                        'name': 'Test',
                        'view_mode': 'form',
                        'view_type': 'form',
                        'res_model': 'test.override',
                        'type': 'ir.actions.act_window',
                        'nodestroy': True,
                        'target': 'new',
                        'context': {'sale_id': order_id.id}
                            }

        self.write(order_id, {'state': 'order_confirm'})
        return True

【问题讨论】:

  • 这可能只是 Stack Overflow 上的一个错误,但您在 sale_order.action_button_confirm 中的 return 语句的第一行有一个杂散的、不匹配的单引号。我怀疑这与您报告的问题有关(您会收到 SyntaxError 以获取此类不匹配的报价)。
  • 我只是忘了引用但同样的错误。

标签: python openerp


【解决方案1】:

在调用 write 方法时不需要传递 order_id。只需将值传递给它。

self.write({'state': 'order_confirm'})

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2016-06-24
    • 2015-05-18
    • 1970-01-01
    • 2013-03-09
    • 2016-04-25
    相关资源
    最近更新 更多