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)
所以我有一个 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)