操作记录集

来自Odoo V
跳转至: 导航搜索

我们肯定想要添加、删除或替换这些相关的元素字段,因此这就引出了一个问题:如何对记录集进行操作?

记录集是不可变的,这意味着它们的值不能被直接修改。相反,修改一个现有的记录集意味着根据一个新的记录集创建一个新的记录集。

一种方法是使用受支持的设置操作︰

 rs1 | rs2是设置union操作,结果是两个记录集所有的元素。

 rs1 + rs2是设置addition操作,结果是两个记录集做为一体的元素,它可能会导致重复记录。

 rs1 & rs2是设置intersection的操作,结果只是两个记录集相同的元素。

 rs1 – rs2是设置difference的操作,结果是rs1元素不在rs2记录集的元素 也可以使用切片表示法,如这些例子所示︰

 rs[0]和rs[-1]分别检索第一个元素和最后一个元素。

 rs[1:]结果是拷贝没有第一个元素的记录集。这个生成与rs – rs[0]相同的记录,但它保存原来的顺序。

注意

在Odoo 10中,操纵记录集保存顺序。这是不同于以往Odoo的版本,尽管添加和切片是已知的,操纵记录集不能保证记录的顺序。

我们可以通过使用这些操作来删除或添加更改记录集元素。这里有一些例子︰

 self.task_ids |= task1如果不在记录集,则添加task1记录

 self.task_ids -= task1如果在记录集中,则删除特定的记录task1

 self.task_ids = self.task_ids[:-1]删除最后一条记录

关系字段包含记录集值。多对一的字段可以包含一个单例记录集,并且对多字段包含有任意数量的记录集记录。我们使用一个常规的赋值语句,或者使用create()和write()方法和一个字典的值。在这最后条件,一种特殊的语法用于修改对多字段。它是相同的XML记录为关系字段提供值,在第4章,模块数据,设置相关字段值部份中。

例如,write()语法与前面的三个任务等价的例子是。 作为一个例子,write()相当于三个前面的分配示例中的语法是︰

 self.write([(4, task1.id, None)]) 添加task1记录

 self.write([(3, task1.id, None)]) 从记录集删除task1

 self.write([(3, self.task_ids[-1].id, False)]) 删除最后一条记录