Odoo 13 — Недопустимый синтаксис ввода для типа integer: «virtual_xxx» при обновлении One2many внутри onchange

#python #odoo #odoo-13

Вопрос:

Я пытаюсь обновить одно из многих полей внутри onchange метода.

Как говорится в документации, я использую update метод, а не стандартные методы CRUD, такие как create .

У меня есть этот фрагмент кода:

 class HrExpenseSheet(models.Model):
    _inherit = "hr.expense.sheet"


    @api.onchange('employee_id')
    def _update_expense_ids(self):
        
        # define variables ...

        values = {
            'product_id': product_id,
            'name': name,
            'product_uom_id': product_uom_id, 
            'unit_amount': unit_amount, 
            'quantity': quantity, 
            'total_amount': total_amount
        }
            
        self.update({'expense_line_ids':[(0, 0, values)]})

 

Это почти работает. Я добавляю свою запись в таблицу, но после этого вся таблица просто ломается… Когда этот код выполняется, происходит пара вещей:

  • Я не могу сохранить документ, потому что якобы требуемый unit_amount не заполнен — он явно должен быть
  • Когда я пытаюсь отредактировать эту конкретную строку, я не могу этого сделать, потому что это приводит меня к совершенно новой записи без заполнения моих данных (но данные присутствуют в табличном представлении).
  • Я не могу добавить новую строку, потому что, когда я нажимаю кнопку, я получаю ошибку psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "virtual_2509" LINE 1: ...mpany_id" = 1)) AND (("hr_expense"."id" not in ('virtual_2...

Что, черт возьми, происходит. У меня был такой же код, работающий в версии 8.0 без проблем, но это не работает в версии 13.0.

Комментарии:

1. является ли product_id и product_uom_id целочисленным значением?

2. Да, это целое число