OpenErp中product.template中eval属性的说明

时间:2014-10-16 13:14:06

标签: eval openerp odoo

我需要了解Odoo产品模块的product_demo.xml中以下代码中的eval属性:

"record id="product_product_4_product_template" model="product.template">
            field name="attribute_line_ids" eval="[(6,0,[ref('product.product_attribute_line_1'), ref('product.product_attribute_line_2'), ref('product.product_attribute_line_3')])]"/>
        </record>"

我知道此处设置了attribute_line_ids值。我也理解&#39; ref&#39;里面的价值观。指的是XML ids,简而言之,它将返回模型 - &quot; product.attribute.line与XML id关联。

我真的不明白eval属性中每个值的含义以及它对视图级别和数据库级别的更改。我已经提到了许多odoo文档,但没有一个可以提供清晰度。

1 个答案:

答案 0 :(得分:11)

这会将一堆值添加到名为Many2many的{​​{1}}字段中。 Odoo具有在attribute_line_ids字段上设置值的特殊语法。此语法为described here,并在您询问的代码中使用。

基本上,要修改many2many关系,请使用三元素元组。元组的第一个元素是一个数字命令,另外两个元素是值 - 它们的确切函数取决于命令。

有六个数字命令:

  • 0 - 创建新对象并将其添加到Many2many关系
  • 1 - 更新关系中已存在的对象
  • 2 - 删除关系中已存在的对象
  • 3 - 从关系中删除现有对象,而不删除它
  • 4 - 将现有对象添加到关系
  • 5 - 从关系中删除所有对象,而不删除它们
  • 6 - 用新的一组对象替换关系中存在的上层对象

代码的相关部分如下所示:

Many2many

这是一个三元素元组(由于代码在(6,0,[ref('product.product_attribute_line_1'), ref('product.product_attribute_line_2'), ref('product.product_attribute_line_3')]) 关系上设置值,因此是预期的):

  • 第一个元素是命令。 “6”表示先前存在于关系中的元素(如果有)将被替换为将元素作为元组的第三个元素传递的元素。
  • 第二个论点是无关紧要的。它与其他命令有关,但与“6”一起使用时,它可以是任何内容(我个人会使用Many2many来更好地反映这一点。)
  • 第三个元素是id列表。由于第一个元素是“6”,这表示将被放入关系中的对象,替换之前的任何内容。