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>