Odoo 类型错误:'NewId'对象不可迭代



我试图创建一个活动时,一个阶段的变化发生,但不断得到TypeError: 'NewId' object is not iterable。我发现@onchange创建了一个取代self的新对象,我猜这是错误的原因。

下面是我的代码:
class ProjectSetAndDateType(models.Model):
_inherit = 'project.task.type'
last_stage = fields.Boolean(string="Fertigstellungsstufe")

class ProjectSetEndDate(models.Model):
_inherit = 'project.task'
@api.onchange('stage_id')
def _set_end_date(self):
if self.stage_id.last_stage:
self.kanban_state = "done"
self.date_finished = datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')
activity_deadline = datetime.now() + timedelta(days=30)
data = {
'res_id':  self._origin.id,
'res_model': 'project.task',
'res_model_id': self.env['ir.model'].search([('model', '=', 'project.task')]).id,
'user_id': self._origin.project_id.user_id.id,
'summary': 'Aufgabe archivieren nach Fertigstellung',
'activity_type_id': self.env.ref('project_set_end_date.mail_set_end_date_archive').id,
'date_deadline': activity_deadline
}
self.env['mail.activity'].create(data)

'NewId'对象是一个记录集,当你创建任何新记录时,odoo将把它存储在NewId类中,而不是在数据库中,并且你试图在尚未创建的记录中写入kanban_state, date_finished。我建议您更改逻辑并在写入或创建方法上重写此代码,

注意:确保你没有在onchange方法上创建任何记录,因为这是非常危险的,而且不友好。

我把它重写成这样,现在它按预期工作了。

from odoo import models, fields, api
from datetime import timedelta
from datetime import datetime

class ProjectSetAndDateType(models.Model):
_inherit = 'project.task.type'
last_stage = fields.Boolean(string="Fertigstellungsstufe")

class ProjectSetEndDate(models.Model):
_inherit = 'project.task'
@api.multi
def write(self, vals):
if 'stage_id' in vals:
final_stage = self.env['project.task.type'].search([('id', '=', vals['stage_id'])]).last_stage
if final_stage:
vals['kanban_state'] = "done"
vals['date_finished'] = datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')
activity_deadline = datetime.now() + timedelta(days=40)
data = {
'res_id':  self.id,
'res_model': 'project.task',
'res_model_id': self.env['ir.model'].search([('model', '=', 'project.task')]).id,
'user_id': self.project_id.user_id.id,
'summary': 'Aufgabe archivieren nach Fertigstellung',
'activity_type_id': self.env.ref('project_set_end_date.mail_set_end_date_archive').id,
'date_deadline': activity_deadline
}
self.env['mail.activity'].create(data)
res = super().write(vals)
return res

相关内容

  • 没有找到相关文章

最新更新