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 | <!--# 直接重写--> |