Ошибка проверки odoo при попытке создать функцию stock.move из onchange

Поэтому я хочу автоматически создать линию перемещения (move_lines) в stock.picking из @onchange функция. Вот моя функция: это всего лишь маленький тест. Когда значение поля changed изменить, я принимаю это как идентификатор продукта (product_id) в строке перемещения, а затем добавьте эту строку перемещения в уже существующий список move_lines,

NB1:move_lines отношение One2many в stock.picking,

NB2: декларация product_id в stock.move:

product_id = fields.Many2one(
        'product.product', 'Product',
        domain=[('type', 'in', ['product', 'consu'])], index=True, required=True,
        states={'done': [('readonly', True)]})

Моя функция:

changed = fields.Integer('Changed')

@api.onchange('changed')
    def _changed_onchange(self):
        move_lines = []

        for line in self.move_lines:
            move_lines.append({'product_id': line.product_id.id or False,
                               'product_qty': line.product_qty or 0,
                               'name': line.product_id.name,
                               'product_uom': line.product_uom.id,
                               'date_planned': datetime.date.today(),
                               'date_expected': datetime.date.today()
                               })

        move_lines.append({'product_id': self.changed,
                           'name': 'default',
                           'product_uom': 1,
                           'date_planned': datetime.date.today(),
                           'date_expected': datetime.date.today()
                           })

        return {'value': {'move_lines': move_lines}}

Если я создал строки перемещения, используя вид, затем сохранил, все работает нормально, но когда я изменяю значение поля, чтобы функция вставляла новую строку перемещения, сохранение не работает, и я продолжаю получать ошибку:

Odoo Server Error - Validation Error
The operation cannot be completed, probably due to the following:
- deletion: you may be trying to delete a record while other records still reference it
- creation/update: a mandatory field is not correctly set

[object with reference: product_id - product.id]

В чем проблема?

1 ответ

Добавить строку к move_lines, Вы можете использовать следующий синтаксис:

@api.onchange('changed')
def _changed_onchange(self):
    values = {'product_id': self.changed,
              'name': 'default',
              'product_uom': 1,
              'date_planned': datetime.date.today(),
              'date_expected': datetime.date.today(),
              'location_id': 1,
              'location_dest_id': 1
              }

    self.move_lines |= self.move_lines.create(values)

Чтобы добиться этого с помощью приведенной выше логики, вы можете попробовать заполнить значения x2many, но я рекомендую вам использовать операции Set, и вы можете найти пример в мастерах Lunching.

Другие вопросы по тегам