Как сохранить значения полей One2many?
Я добавляю настраиваемое поле One2many в представление формы sale.order чуть ниже sale.order.line.
Я вычисляю значения on_change, он отображает значения, но когда я собираюсь сохранить заказ на продажу, он генерирует ошибку, которая
ValueError: неверное значение для tax.lines.order_id: sale.order(24,)
Python:
class SaleOrderInherit(models.Model):
_inherit = ['sale.order']
tax_line = fields.One2many('tax.lines', 'order_id', states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}, copy=True, auto_join=True)
@on.change('partner_id')
def calculating_tax(self):
//After some code
self.env['tax.lines'].create({
'tax_id': tax['tid'],
'name': tax['name'],
'amount': tax['tax'],
'order_id': self.id
})
class TaxLines(models.Model):
_name = 'tax.lines'
tax_id = fields.Char('Tax Id')
name = fields.Char('Tax Name')
amount = fields.Char('Tax Amount')
order_id = fields.Many2one('sale.order', string='Tax Report', ondelete='cascade', index=True, copy=False)
Потому что я создаю поле one2many перед оформлением заказа. Но есть ли способ избавиться от этой проблемы.
Изменить: ошибка после замены моего кода на Charif DZ
код:
1 ответ
Решение
Никогда не создавайте записи в событиях onchange, они сразу же сохраняются в базе данных, что, если пользователь решил отменить заказ, вместо создания использовать новый с созданием объекта, но не сохраняет его в базе данных.
def calculating_tax(self):
//After some code
# to add record to your o2m use `|` oprator
# if you want to clear record before start adding new records make sure to empty your field first by an empty record set like this
# self.tax_line = self.env['tax.lines'] do this before the for loop that is used to fill-up the field not put it inside or you will get only the last record
self.tax_line |= self.env['tax.lines'].new({
'tax_id': tax['tid'],
'name': tax['name'],
'amount': tax['tax'],
# 'order_id': self.id remove the many2one because it's handled automaticly by the one2many
})
Надеюсь, это поможет тебе удачи