Odoo 以编程方式创建模型并 Add/Append 到 One2many 字段

Odoo Create Model Programmatically and Add/Append to One2many Field

所以我有一个 Sale 模型和 SaleLine 模型。 Sale 模型有一个字段 sale_line_ids 作为 One2many 来自 SaleLine 模型。

促销

class Sale(models.Model):
    _name = 'store.sale'
    _description = 'Store Sale'

    ...
    sale_line_ids = fields.One2many('store.sale_line', 'sale_id', string='Sale Lines')
    ...

销售线

class SaleLine(models.Model):
    _name = 'store.sale_line'
    _description = 'Store Sale Line'

    sale_id = fields.Many2one('store.sale', string='Sale Reference', ondelete='cascade', index=True)
    product_id = fields.Many2one('store.product', string='Product', required=True)
    quantity = fields.Integer(string='Quantity', required=True)

我想以编程方式创建 SaleLine 模型并将该模型添加到 sale_line_ids 字段。我该怎么做?

这个答案是我真正想要实现的。但是,模型会立即保存到数据库中。我需要使用 env[].create({}) 方法创建一个 SaleLine 模型。

self.env['store.sale_line'].create({
    'sale_id': rec.id,
    'product_id': id_from_another_model,
    'quantity': quantity_from_another_model,
})

之后,我需要提交以将数据保存在数据库中。

self.env.cr.commit()

更新

之前的回答需要记录直接存储。解决该问题的最佳答案是创建仅在用户单击保存按钮时保存的临时记录。

语法

(0, 0,  { values })

首先创建sale_line列表

sale_line = []
for data in list_of_data:
    sale_line.append([0, 0, {
        'sale_id': data['sale_id'],
        'product_id': data['product_id'],
        'quantity': data['quantity'],
    }])

sale_line 列表分配给 sale_line_ids 字段

self.write({'sale_line_ids': sale_line})

并覆盖创建方法以提交更改

@api.model
def create(self, values):
    self.env.cr.commit() # This is the important part

    return super(Sale, self).create(values)