【问题标题】:Odoo, create() missing 1 required positional argument: 'vals'Odoo,create() 缺少 1 个必需的位置参数:'vals'
【发布时间】:2021-02-09 21:18:50
【问题描述】:

我继承了 account_analytic_line 的创建函数。那里的逻辑是,如果字段 support_ticket_id 出现在 vals 字典中,它将执行 if 语句中的所有代码。

    @api.model
    def create(self, vals):
        for val in vals:
            if 'support_ticket_id' in val:
                ticket_id = vals['support_ticket_id']
                ticket = self.env['website.support.ticket'].search([('id', '=', ticket_id)], limit=1)
                vals['account_id'] = ticket.analytic_account_id.id
        res = super(AccountAnalyticLine, self).create(vals)
        return res

奇怪的是,在我当地的环境中运行良好。但是在生产环境上,是抛出这个错误:

TypeError: create() 缺少 1 个必需的位置参数:'vals'

更奇怪的是,如果我更改为@api.multi(我知道它不能在 create 方法中使用,但我只是试了一下)并且在我的本地环境中会抛出同样的错误,但是在生产上工作正常。所以在本地和生产之间都是倒退的,我不知道是什么触发了这种情况。

【问题讨论】:

    标签: python python-3.x odoo odoo-12


    【解决方案1】:

    用代码试试:

    @api.model
    def create(self, vals):
        if vals.get("support_ticket_id"):
            ticket_id = vals.get("support_ticket_id")
            ticket = self.env['website.support.ticket'].browse(ticket_id)
            if ticket.analytic_account_id:
                vals['account_id'] = ticket.analytic_account_id.id
        res = super(AccountAnalyticLine, self).create(vals)
        return res
    

    改进了几点:

    • 如果您有整数的票证ID,我们可以使用浏览方法。
    • 不必要地使用 for 循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2017-03-27
      • 2019-11-12
      相关资源
      最近更新 更多