我继承了account_analytic_line的create函数。这里的逻辑是如果字段support_ticket_id在val字典中,它将执行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(我知道它不能在创建方法中使用,但我只是给了它一个镜头),在我的本地环境中抛出同样的错误,但在生产中工作得很好。所以在本地和生产之间都是反向的,我不知道是什么触发的。
Try with code:
@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循环