【问题标题】:one2many field stores only last record when fillone2many 字段在填充时仅存储最后一条记录
【发布时间】:2020-04-29 06:26:47
【问题描述】:

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

我从 account.invoice 模型的 invoice_line_ids 获取产品。 但是当我将这些产品存储在我的自定义模型中时,只有最后一条记录存储在我班级的 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,)

【问题讨论】:

    标签: python-3.x odoo-12


    【解决方案1】:

    根据x2many values filling,您使用的格式将id 为id 的现有记录更新为values 中的值。 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 最后一行的值,您要求系统更新特定行(id invoice_report.id)在您调用write 方法时在每次迭代中具有相同的值。

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

    【讨论】:

    • 非常感谢,它成功了。很抱歉,由于声誉低于 15,我无法为您的答案投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多