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
虚拟的关系()| 一系列的记录Many2many
odoo 会再建立一张单独的关系表(一个文章多个标签,标签下多个文章)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 | <!--# 直接重写--> |