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
})
请帮助我了解 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
})