Odoo中的继承

匿名 (未验证) 提交于 2019-12-03 00:40:02

https://www.cnblogs.com/cnodoo/p/9280003.html

在实际开发过程中,经常会遇到需要修改Odoo原生逻辑的情况。然而,直接修改Odoo底层代码,不利于后面odoo版本迭代时替换。因此,在不改变底层对象的时候添加新的功能,就显得十分重要。

继承修改可以发生:Python代码和XML视图、Qweb模版上

一:模型继承

# -*- coding: utf-8 -*- from odoo import models, fields, api class Sub(models.Model):     _inherit = ‘Root‘  //通过_inherit属性来继承父模型     newCol=fields.XX....  //在下面添加新字段即可。

需要修改的属性显式重写即可,会保留未修改的所有其他未在此处明确使用的字段的属性。

声明具有完全相同名称的方法来覆盖相应的方法

使用Python的super()方法来调用父方法。然后,可以在调用super()方法之前和之后,在原有逻辑周围添加新逻辑

允许一个模型以透明的方式包含其他模型。通过字典映射继承模型与字段的关系,并关联它们

相当于成员变量:引用一个外部的类对象赋值给这个模型的一个成员,但是对象的值是保存在被引用的类的数据库表中的。但是在当前类通过成员修改了变量值,则会同步到被引用的类的数据库表中)

二:视图继承

这意味着需要定位XML中的元素位置,然后在这些位置引入修改

XML,在其中定位元素的最好方法是使用XPath表达式,如果XPath表达式匹配到多个元素,只有第一个元素会被修改

使用独特的属性以使其指定尽可能具体,使用name属性是确保我们找到扩展点的确切xml元素的最简单方法。 因此,在我们的视图XML元素上定义name属性是很重要的。

֮ǰ添加date_deadline字段的具体例子:

<xpath expr="//field[@name]=‘is_done‘" position="before"> //expr属性值的意思是:找到<filed name="is_done"/>的标签        <field name="date_deadline" /> </xpath> 

仅使用要定位的元素的特定属性及定位类型相关信息就可以了

 <field name="is_done" position="before">       <field name="date_deadline" />   </field> 

【如果字段在同一视图中多次出现,则应始终使用XPath语法。】

after:将内容添加到父元素之中,匹配的节点之后。 before:添加内容在匹配节点之前。 inside(默认值):匹配节点内的追加内容。 replace:替换匹配的节点。如果使用空内容,它将删除该匹配的元素。 attributes:修改匹配元素的XML属性。在元素内容使用<attribute name =“attr-name”>实现给标签设置新属性值attr-name。

<record id="view_form_模块名_inherited" model="ir.ui.view">        <field name="name">模块名_extension</field>        <field name="model">模块.数据模型</field>        <field name="inherit_id" ref="模块_模型.被继承的form表单name属性"/>        <field name="arch" type="xml"> //在arch中进行扩展操作:定位―>插入/修改            <field name="定位标签位置" position="在标签的哪里进行扩展">                <field ......> //扩展内容            </field>        </field> </record> 

2)扩展列表视图

   <record id="view_tree_模型名_inherited" model="ir.ui.view">        <field name="name">模型名 extension</field>        <field name="model">模块.模型</field>        <field name="inherit_id" ref="被继承的tree视图name名"/>        <field name="arch" type="xml">//在arch中进行扩展             <field name="定位标签名" position="扩展位置">                  <field ....进行扩展 />             </field>        </field>     </record>

3)扩展搜索视图

  <record id="view_filter_模型名_inherited" model="ir.ui.view">        <field name="name"> extension</field>        <field name="model">模型名</field>        <field name="inherit_id" ref="被继承的filter视图名"/>        <field name="arch" type="xml"> //下面进行定位、扩展举例            <field name="name" position="after">                <filter name="filter_my_tasks" string="My Tasks" domain="[(‘user_id‘,‘in‘,[uid,False])]" />            </field>         </field>     </record> 

对于记录:

<record id="x" model="y">

修改菜单项:

   < ! ― ― 修改菜单项-->    <record id="菜单视图id" model="ir.ui.menu">        //进行修改    </record>

修改action_window:

   <record model="ir.actions.act_window"     id="action菜单id">        //进行修改    </record>

二:模块数据

1:列表数据的导出

数据导出是tree视图的标准功能,不涉及编码。

只需在列表视图左侧复选框勾选需要导出的记录,然后点击列表上方“动作”下拉列表,选择“导出”。

在导出对话框中选择需要导出的列、导出的格式(一般选择CSV,勾选 导入兼容导出),然后点击“导出到文件”即可。

2:导入数据

在面板点击“导入”按钮,选择文件后载入。然后点击“验证”,检查文件内容的格式合法性,如果正常,则点击“导入”即可。

3:模块数据

模块使用数据文件,将其配置加载到数据库,可以通过CSV和XML文件完成。为了完整性,也可以使用YAML文件格式,但是它很少用于加载数据。

一个附加的限制是文件名必须与要加载数据的模型的名称匹配,这样系统才可以推断应该将数据导入相应的模型。

数据CSV文件的常见用法是加载到ir.model.access模型中的安全定义。

4:演示数据

一个模块在安装时,尽量事先定义一些演示数据,方便在安装后进行测试使用。

演示数据我们放在data目录下,命名为 xx.xx.csv或者xx.xx.xml

然后在manifest文件中的data属性进行配置。

5:XML

安装addon模块时创建,但在后续模块升级中不会对其进行任何操作

XML中定义记录:

每个<record>元素有两个基本属性id和model,并且包含为每列分配值的<field>元素。如前所述,id属性对应于记录的外部标识符,并且模型属性对应于要写入记录的目标模型

设置字段值的几种方式如下:

1:<record>元素定义数据记录并包含<field>元素以设置每个字段的值,field元素的name属性标识要写入的字段,要写入的值是元素内容:字段的开始和结束标记之间的文本。

2:定义字段值的更精细的替代方法是eval属性:它评估一个Python表达式并将结果值分配给字段。

<field name="date_deadline"  eval="(datetime.now() + timedelta(-1)).strftime(‘%Y-%m-%d‘)" /> 

3:<field>元素还有一个ref属性,用于使用外部标识符设置many-to-one字段的值。

<field name="user_id" ref="base.user_demo" /> 

XML中触发函数:

可以通过<function>元素,在其加载过程中执行方法。这可以用来建立演示和测试数据。

<function  model="数据模型"  name="数据模型中的方法"  eval="参数" />

另一方式是触发工作流:

<workflow model="模型"  ref="工作流实例"  action="工作流信号:触发工作流" />

原文:https://www.cnblogs.com/cnodoo/p/9280003.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!