odoo视图(view: tree, form, search, notebook),模型(models: Many2one, One2many, Many2many)
Menus docs
菜单也是用xml来配置
1  | <?xml version="1.0" encoding="UTF-8"?>  | 
id识别用的,唯一name在页面显示出来的文字parent上级菜单是谁(id)action对应的菜单(属于一个集合)sequence菜单的排序
Views docs
xml视图里面添加view的时候可以添加html标签,但必须是闭合的
继承
视图文档
和Models继承差不多,多了inherits_id指向要改写的view,
1  | <field name="inherits_id" ref="id_tags_list" />  | 
在arch里面用xpath定位改写元素
Models docs
数据表模型,
先自己的models中重写别的models的时候需要在__manifest__.py把依赖关系,加入到自己模块的__manifest__.py的depends中。
Many2one直接关联已经存在的表(文章与分类的关系FK)| 单一的记录One2many虚拟的关系()| 一系列的记录Many2manyodoo 会再建立一张单独的关系表(一个文章多个标签,标签下多个文章)ondelete='set null'如果关联的表删除了就把这个字段设置为空ondelete='cascade'如果它关联Many2one的表被删除了,当前这表就会清空相关的全部数据string 字段的别名index 字段是否创建索引
1  | name = fields.Char( string='Name', default=lambda self: self._get_default_name(), ) def _get_default_name(self): return "test"  | 
PS: res.users可以登录的用户信息表;res.partner这张表里面的用户没有登录权限;res.users 可以对应到 res.partner 某条记录
继承和扩展
- 经典继承
 - 原型继承(拷贝一个出来)
 - 委托继承
 
1  | self.env.cr.commit() # 提交数据  | 
inheritance视图(view),模型(models)的改写domain在models中过滤Many2one字段
1  | domain=['|', ('instructor', '=', True),  | 
_compute_seats报名与座位的比例,xml的fiels需要加widget=”progressbar”
1  | @api.depends('seats', 'attendee_ids')  | 

- 默认值
default是在models的field中来定义 
1  | name = fields.Char(default="Unknown")  | 
active是odoo中的内置规则,可能是显示的tree视图中,或者根本不显示
1  | active = fields.Boolean(default=True)  | 
onchange乘积,比如商品数量和价格的关系,或者数据小于某个阀值的时候弹出警告`@api.onchange`
1  | @api.onchange('seats', 'attendee_ids')  | 
- `@api.constrains`模型限制,把值限制的可控的范围内
 
1  | 模型限制  | 
1  | # 在数据库中限制  | 
1  | # 拷贝的时候限制  | 
高级视图
- 显示的时候不同的值显示不同的颜色
 
1  | <!-- 在这里的比较符号要用 html 的 小于5 天的,或者大于 15 天的-->  | 

日历视图
1  | <!-- calendar view-->  | 
搜索视图
1  | <!-- filter_domain 字段 -->  | 
ps: Pycharm find in path 可以很方便的查找


甘特图
1  | <gantt string="Session Gantt"  | 
ps: xml 某些配置在删掉的时候还是会在数据库中的,还是会报错,要给个空值给覆盖掉或者直接去数据库中删除

图表视图
1  | # 如果是计算字段必须加 store=True  | 
看板视图


改写视图
1  | <!--# 直接重写-->  |