odoo模型和视图的继承

manifest.py

因为使用的是继承,所以需要在文件里指定所依赖的模块也就是继承的模块

{
    'name': '中国地址',  # 模块名
    'version': '1.0',  # 模块版本
    'summary': '中国地址',  # 模块简介
    'sequence': 2,  # 模块排序
    'description': """
        中国地址
        """,  # 模块介绍
    'author': 'til',  # 模块作者
    'website': 'til',  # 模块站点
    
    'depends': ['base', 'base_address_city'], # 依赖的包,base是必须依赖的,base_address_city是这次继承需要的包

    'data': [

        'views/res_city_view.xml',
        'views/menu_view.xml'

    ],  # 模块用的到数据 视图、权限等
    'application': True,  # 是否作为独立的app存在

}

model文件

from odoo import models


class City(models.Model):
    # 继承对于的model
    _inherit = 'res.city'

视图文件

视图文件不是非要写在一个xml里,可以分开多个。只需要在__manifest__.py文件中指明需要的xml文件就行,注意一点__manifest__.py中的data配置xml文件时是有先后顺序的,如果前面的xml依赖到后面的xml就会报错

  • tree视图和动作视图
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <record id="china_city_tree_view" model="ir.ui.view">
        <field name="name">城市信息</field>
        <field name="model">res.city</field>
<!--        继承的视图 name固定写法 ref继承的视图-->
        <field name="inherit_id" ref="base_address_city.view_city_tree"/>
        <field name="arch" type="xml">
<!--            使用xpath选中需要重写或者覆盖的节点,这里选中的tree节点,如果写了replace就是覆盖,如果不写默认是添加

                position可选内容
                1.after: 在匹配元素之后, 与匹配元素具有相同的父元素;
                2.befor: 在匹配元素之前, 与匹配元素具有相同的父元素;
                3.inside(默认值): 作为匹配元素内容;
                4.replace: 替换匹配元素的内容, 如果值为空将会删除匹配的元素;
                5.attributes: 修改匹配元素的属性.

                attributes 的用法 下面这段表示了,我要将选中节点的invisible属性改为1
                <field name="active" position="attributes">
                     <attribute name="invisible">1</attribute>
                </field>

-->
            <xpath expr="//tree" position="replace">
                <tree>
                    <field name="name"/>
                    <field name="zipcode"/>
                    <field name="country_id"/>
                </tree>
            </xpath>
        </field>

    </record>
    <record id="china_city_act_window" model="ir.actions.act_window">
        <field name="name">城市信息</field>
        <field name="res_model">res.city</field>
        <field name="view_mode">tree,form</field>
    </record>
</odoo>
  • 菜单视图

<?xml version="1.0" encoding="UTF-8" ?>

<odoo>

    <menuitem name="城市信息" id="china_city_menu_root" sequence="13"/>
    <menuitem name="城市信息" id="sec_china_city_menu" parent="china_city_menu_root"
    action="china_city_act_window" sequence="13"
    />

</odoo>
上一篇:MySQL 简单索引


下一篇:试题 算法训练 网络流裸题