Search code examples
odooodoo-11

Odoo TypeError: 'NewId' object is not iterable


I am trying to create an activity when a stage change occurs but keep getting TypeError: 'NewId' object is not iterable . I figured out that @onchange creates a new object which replaces self and I am guessing this is the errors cause.

Here is my code:

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)

Solution

  • 'NewId' object is an recordset, when you are creating any new record odoo will store it in newid class , not in database and you are trying to write the kanban_state, date_finished in the record which is not yet created. I suggest you to change the logic and rewrite this code on the write or create method,

    Note: make sure you don't create any record on onchange method because it is very risky and not user friendly.