Как сохранить значения полей One2many? - PullRequest
1 голос
/ 10 января 2020

Я добавляю пользовательское 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 код:

enter image description here

1 Ответ

1 голос
/ 10 января 2020

Никогда не создавайте записи в событиях onchange, они немедленно сохраняются в базе данных, что, если пользователь решил отменить заказ, вместо того, чтобы создавать, использовать new с созданием объекта, но не сохраняет его в базе данных.

       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
                  })

Надеюсь, это поможет вам удачи

...