删除来自one2many的记录

时间:2017-04-27 06:49:00

标签: openerp odoo-8 openerp-8

我需要在onchange方法中删除one2many记录。我试过下面的代码。

*。PY

@api.onchange('abt')
def _onchange_active(self):
    resident_flat_rel_id =[]
    if self.active == False:
        write=self.write({'resident_flat_rel_ids':[(2,self.resident_flat_rel_ids.id,False)]})
        print'werite', write // prints True.

但是记录不会从数据库中删除。

resident_flat_rel_ids是父模型中的one2many字段。

3 个答案:

答案 0 :(得分:2)

实际上one2many未存储在db中。 ORM正在从相关one2many字段为您提供many2one。一旦我们知道我们可以继续删除记录。

好了,现在我们知道one2many是如何工作的,我们需要删除记录。这有两个选项:从db中删除记录或仅从one2many字段中删除引用。

要删除记录,您应该删除它(请参阅官方文档.hint:unlink())。如果你想删除只是引用,那么你应该删除相关记录的many2one字段,这很简单。

祝你好运

答案 1 :(得分:0)

你可以做一件事......

如果要删除完整数据,请执行以下操作:

迭代你的one2many字段,即resident_flat_rel_ids 像

for individual in resident_flat_rel_ids:
    if some condition: //If requierd
        individual.unlink()

如果您只想删除引用,请执行以下操作: 将每个对象的inverse_name(表示one2many字段的反向关系的a many2one字段)设为False

for individual in resident_flat_rel_ids:
    if some condition: //If requierd
        individual.inverse_name = False

答案 2 :(得分:0)

您可以使用以下one2many规则简单地删除one2many记录: (2,ID)删除并删除ID = ID的链接记录(调用ID上的取消链接,这将完全删除对象以及指向该对象的链接)

return {'value': {'resident_flat_rel_ids':[(2,individual.id) for individual in self.resident_flat_rel_ids]}}