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

Joh*_*ohn 5 eval openerp odoo

我需要eval在Odoo的product模块的product_demo.xml中理解以下代码中的属性:

"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>"
Run Code Online (Sandbox Code Playgroud)

我知道attribute_line_ids这里的价值正在设定中.我也理解'ref'中的值是指XML ids,简而言之,它会返回与XML id相关的model-'product.attribute.line.

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

Lud*_*mer 12

这会将一堆值添加到Many2many名为的字段中attribute_line_ids.Odoo具有在Many2many字段上设置值的特殊语法.此处描述了此语法,并在您询问的代码中使用.

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

有六个数字命令:

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

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

(6,0,[ref('product.product_attribute_line_1'), ref('product.product_attribute_line_2'), ref('product.product_attribute_line_3')])
Run Code Online (Sandbox Code Playgroud)

它是一个三元素元组(由于代码在Many2many关系上设置值,因此是预期的):

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