Odoo | 入门 | (4)-继承模式(基于Odoo12)

继承

模型继承


Odoo提供了两种模型继承机制

第一种继承允许在其他包(module)中继承修改当前包(module)的相关内容(inherit):
1. 在已存在的model中继承新增字段
2. 重写已存在model的字段定义
3. 增加model约束
4. 增加model方法
5. 重写model中已存在的方法

第二种继承允许连接到每一个继承的父级model,并且提供直接访问父级model
字段属性的方式。(inherits)

继承写法分为三种

1. 有_inherit无_name:
    对当前model属性进行扩展.

2. 有_inherit有_name:
    创建出一个新的model拥有父级的所有字段,会在当前model表中初始化继
    承的字段列.

3. _inherits:
    隐含式继承,能够直接使用父级的所有字段,调用时就和使用自己model的
    字段一样,但不需要出现在当前的表记录列中.

视图继承


简介

替换已有视图的内容,Odoo提供了多子视图继承一个父视图,并且对父视图中的
元素进行增加删除或修改。

视图的继承需要在XML视图定义的时候使用inherit_id字段,在继承的子视图中,
arch标签块内能够定义任意数量的xpath标签元素,用来修改当前的父视图内容。
<!--在父级视图description字段后添加一个idea_ids字段-->
<!-- improved idea categories list -->
<record id="idea_category_list2" model="ir.ui.view">
    <field name="name">id.category.list2</field>
    <field name="model">idea.category</field>
    <field name="inherit_id" ref="id_category_list"/>
    <field name="arch" type="xml">
        <!-- find field description and add the field
             idea_ids after it -->
        <xpath expr="//field[@name='description']" position="after">
          <field name="idea_ids" string="Number of ideas"/>
        </xpath>
    </field>
</record>
expr: 是选择父级视图的单个元素标签路径,如果找不到会抛错
position: 操作属性
    1. inside: 在当前expr标签内容末尾添加块级元素
    2. replace: 替换当前expr定位的标签元素
    3. before: 在当前expr定位的标签元素前添加同级元素
    4. after: 在当前expr定位的标签元素后添加同级元素
    5. attributes: 修改当前expr定位的标签元素属性
<record id="idea_category_list2" model="ir.ui.view">
    <field name="name">id.category.list2</field>
    <field name="model">idea.category</field>
    <field name="inherit_id" ref="id_category_list"/>
    <field name="arch" type="xml">
        <!--inside-->
        <xpath expr="//page[@name='sales_purchases']/group" position="inside">
            <group>
                <field name="gruop_field01"/>
                <field name="gruop_field02"/>
            </group>
        </xpath>
        
        <!--before-->
        <xpath expr="//field[@name='description1']" position="before">
            <field name="before_field"/>
        </xpath>
        
        <!--after-->
        <xpath expr="//field[@name='description2']" position="after">
            <field name="after_field"/>
        </xpath>
        
        <!--replace-->
        <xpath expr="//field[@name='description3']" position="replace">
            <!--什么都不写 就是把这个字段从视图上删除-->
        </xpath>
        
        <!--attributes-->
        <xpath expr="//field[@name='description4']" position="attributes">
            <attribute name="string">Serial</attribute>
        </xpath>
    </field>
</record>

Domain


域(Domain)是对数据筛选的条件,它是一个元组列表,每一个元组中含有三个元素 
(field_name,operator,value)
field_name:当前模型的字段名字符串
operator:符号有 >,<,=,>=,<=,!=,like,ilike,=like,=ilike,not like,
			  not ilike,=?,in,not in,child_of,parent_of
value:判断结果值
[('field01','=','001')]
Domain 元组单元间的关系可以通过前缀表达式组合 '|'(或),'&'(并),'!'(非)
# field01不等于001 
# 并且 ((field03为003 且 field04为004) 或 (field02 为 002)) 
# 的domain条件格式如下:
['!',('field01','=','001'),
 '|',('field02','=','002'),
 '&',('field03','=','003'),('field04','=','004')]

Domain可以用于:
1. 业务逻辑数据筛选
2. 字段取值范围控制
3. 界面数据显示范围控制
4. 权限规则范围控制
5. 记录规则控制
6. API方法中使用 例如 search、search_read、onchange等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特本特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值