python - Odoo,create() 缺少 1 个必需的位置参数:'vals'
问题描述
我继承了account_analytic_line的 create 函数。那里的逻辑是,如果字段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
奇怪的是,在我当地的环境中运行良好。但是在生产环境中,抛出了这个错误:
类型错误:create() 缺少 1 个必需的位置参数:'vals'
更奇怪的是,如果我更改为 @api.multi (我知道它不能在 create 方法中使用,但我只是试了一下)并且在我的本地环境中会抛出同样的错误,但在生产中是工作正常。所以在本地和生产之间都是倒退的,我不知道是什么触发了这种情况。
解决方案
尝试使用代码:
@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 循环
推荐阅读
- python - 使用带有 ci 参数的 seaborn 线图时获取波段值
- reactjs - 重置 recaptcha 时出现问题 - 无法读取代码的 null 属性“重置”
- docker - Travis 条件构建 - 如何跳过除主分支之外的部署阶段
- java - 使用 charAt() 时无法打印字符串
- mysql - GoLang 的配置返回“非名称”错误
- cvxpy - 尝试为正半定锥约束创建约束时,问题不遵循 DCP 规则
- java - 为多个主类创建 1 个 jar 文件
- python-3.x - 为什么“全局”在“如果”中不起作用?
- regex - 正则表达式分别在任何地方查找匹配项
- android - 使用 google_maps_autocomplete 后 Flutter 无法运行