【问题标题】:How to save One2many fields values?如何保存 One2many 字段值?
【发布时间】:2020-01-10 06:00:06
【问题描述】:

我将在 sale.order.line 下方的 sale.order 表单视图中添加自定义 One2many 字段。

我正在计算值 on_change 它正在显示值,但是当我要保存销售订单时,它会生成错误

ValueError:tax.lines.order_id 的值错误:sales.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 代码替换我的代码后出错:

【问题讨论】:

  • Adam 关系不会这样工作,many2one 指向 account.move 并且 one2many 在 sale.order 中?!!
  • 是的,但这是一个打字错误......
  • 顺便说一句,是否可以在不使用 fkey 的情况下在 sale.order 中创建 one2many 字段?我问是因为没有 fkey 值如何与 sale.order 和 sale.order 相关,而没有确认或保存不显示其 id
  • 所以它只是为了 UI 使其计算字段为 store=False 我认为它不会导致保存问题,因为数据库中不会保存任何内容,并尝试使其变得 many2many 我认为它更容易
  • 终于 many2many 完成了我的工作:D

标签: odoo odoo-13 one2many


【解决方案1】:

永远不要在 onchange 事件中创建记录,它们会立即保存在数据库中,如果用户决定取消订单,而不是 create use 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
                  })

希望对你有帮助

【讨论】:

  • 那么如何保存记录呢?因为它给了我错误:tax.lines(tax.lines),约束:tax_lines_order_id_fkey
  • 我之前在 o2m 字段中没有尝试过尝试放回 order_id : self.id
  • 这些出现在新方法调用中,还是保存记录时出现?
  • 试过了,但什么都没有……我只是用你的代码替换了我的代码,它显示了值,但是当我点击保存或确认按钮时,它给出了错误
  • 你能把错误的堆栈跟踪放在你的问题中吗?
猜你喜欢
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
相关资源
最近更新 更多