one2many字段在填充时只存储最后一条记录

one2many field stores only last record when fill

请帮助我了解 odoo12 中的 one2many 字段。 首先,抱歉语法错误。

我正在从 account.invoice 型号的 invoice_line_ids 获取产品。 但是当我将这些产品存储在我的自定义模型中时,只有最后一条记录存储在我 class 的 one2many 字段中。 这是我的代码。

invoice_report = self.create(vals)
product_dict={}
product_list=[]

for line in ids.invoice_line_ids:
    product_dict.update({
        'product_name':line.product_id.name,
        'qty':line.quantity,
        'unit_price':line.price_unit,
        'tax':line.invoice_line_tax_ids.name or "",
        'subtotal':line.price_subtotal
    })

    product_list.append([(1,invoice_report.id,product_dict)])

for data in product_list:
    invoice_report.write({
        'inv_products':data
    })

inv_products 是我的 one2many 字段 invoice_report 是我最近创建的记录。即 custom.invoice(1,)

根据 x2many values filling,您使用的格式使用 values 中的值更新了 id id 的现有记录。 id 应该是 inv_products 记录的 ID,而不是 custom.invoice 记录。

如果数据库中不存在 ID 等于 1 的记录,您应该收到 Odoo 服务器错误:

One of the records you are trying to modify has already been deleted (Document type: custom.report.line).

(Records: (1,), User: 2) 

您在 for 循环外声明了 product_dict 并在循环内使用了 update,在循环结束时您将重复 invoice_line_ids 最后一行的值,您当您调用 write 方法时,要求系统在每次迭代中使用相同的值更新特定行(id invoice_report.id)。

要向 inv_products 添加新记录,请使用 [(0, 0, values)] 格式:

invoice_report = self.create(vals)
product_list = []

for line in ids.invoice_line_ids:
    product_dict = {

    }

    product_list.append((0, 0, product_dict))

invoice_report.write({
    'inv_products': product_list
})