odoo脚手架
为了方便开发odoo模块,可以在项目的终端中输入
python odoo-bin scaffold addons myaddons
这样就在项目的myaddons文件夹中生成了名称addons的模块。
odoo规范
odoo开发规范 | 同欣数字化落地 (txodoo.cn)
odoo结构
- controllers: 主要是一些HTTP请求相关的业务逻辑。
- models: 模型文件夹,业务的模型都放在这里。
- security: 权限相关的文件。
- views: 视图文件夹,关于界面布局的逻辑在这里。
- static: 静态文件夹,前端使用的qweb文件和js、css文件和图片等静态文件放到这个文件夹内。
- __init__:熟悉python的都懂,不说了
- __manifest__: 9.0之前叫_openerp_.py,Odoo模块必须的文件,包含必要的模块信息。
模型(model)
odoo模块的模型通常在models/目录下,当新增模型时,需要在models/__init__.py中增加模型名称。
odoo所有的持久化模型都要继承自models.Model类。
在脚手架生成的事例中,_name是这个models的名称,而_description是models的描述,当我们要继承某个models的时候,我们可以用_inherit表示继承。
继承:被继承models会拥有继承的models的所有字段。
字段(fields)
上述例子中,给一个变量初始化定义后被称为字段。
odoo有许多字段:
- 字符串字段(Char):用于存储文本数据,如名称、标题等。
- 整数字段(Integer):用于存储整数值,如计数器、年龄等。
- 浮点数字段(Float):用于存储浮点数值,如价格、百分比等。
- 布尔字段(Boolean):用于存储布尔值(True或False),如开关状态、勾选框等。
- 日期字段(Date):用于存储日期值,如生日、合同日期等。
- 日期时间字段(Datetime):用于存储日期和时间值,如创建时间、更新时间等。
- 二进制字段(Binary):用于存储二进制数据,如图像、文件等。
- 选择字段(Selection):用于从预定义选项中选择一个值,如状态、类型等。
- 文本字段(Text):用于存储多行文本数据,如描述、备注等。
- HTML字段(Html):用于存储富文本数据,支持HTML格式,如富文本公告、邮件正文等。
- 关系字段(Many2one、One2many、Many2many):用于建立与其他模型之间的关联关系,如产品与供应商的关系、订单与产品的关系等。
方法
模型中存在方法,可以进行较为复杂数据处理。
常见的方法有:
- create(self, values):用于创建新记录,接收一个字典参数values,包含要创建记录的字段值。
- write(self, values):用于更新现有记录,接收一个字典参数values,包含要更新记录的字段值。
- unlink(self):用于删除记录。
- read(self, fields=None):用于读取记录的字段值,可以指定要读取的字段列表。
- search(self, domain=None, offset=0, limit=None, order=None):用于根据条件搜索符合要求的记录。
- browse(self, ids):用于获取指定记录ID的记录对象。
- copy(self, default=None):用于复制记录,可以指定默认值来更改复制记录的字段值。
- onchange(self, field_name):用于在字段值发生变化时触发的方法,可以在该方法中处理其他字段的变化或执行其他操作。
- compute(self):用于计算字段的值,通过该方法可以定义计算字段的逻辑。
- action_xxx(self):用于执行自定义的动作,其中"xxx"表示动作的名称,可以根据需要定义不同的动作方法。
- button_xxx(self):用于执行与按钮相关的操作,通常用于处理用户交互。
- _get_xxx(self):用于获取计算字段的值,其中"xxx"表示计算字段的名称。
- _set_xxx(self, value):用于设置计算字段的值,其中"xxx"表示计算字段的名称。
注解
如上述图中的方法上面的称为注解。
注解一般有以下几种:
- @api.one:用于标记实例方法,表示该方法将在单个记录上执行。
- @api.depends('field_name'):用于指定计算字段(computed field)所依赖的字段。当被依赖的字段发生变化时,计算字段将被重新计算。
- @api.onchange('field_name'):用于标记字段变化触发的方法。当指定的字段值发生变化时,该方法将被自动调用。
- @api.constrains('field_name'):用于标记约束方法,用于执行字段级别的约束检查。
- @api.constraints('constraint_name'):用于标记约束方法,并指定约束名称。可以在模型中定义多个约束方法。
- @api.model_create_multi:用于标记创建多个记录的方法。通常用于批量创建记录的情况。
- @api.model_create_single:用于标记创建单个记录的方法。
- @api.returns('model_name'):用于指定方法的返回类型,其中'model_name'表示返回模型的名称。
视图(view)
odoo模块下的视图文件通常在view/目录下,当新增视图文件时,需要在__manifast__.py的'data'中添加。
视图文件有先后顺序,请务必检查,否则会报错。
动作视图(action)
在系统上每一个交互就是一个动作,动作视图是交互时的一个引导。
图中定义了addons.action_window的动作视图,模型是addons.addons,包含的视图为tree,form视图。
列表视图(tree)
用于以表格形式显示多个记录,每行代表一个记录,可以选择显示的字段和排序方式。
例
表单视图(form)
用于显示单个记录的详细信息,通常包含各个字段和相关操作按钮。
例
搜索视图(search)
用于定义搜索记录的条件和过滤器,用户可以根据特定条件搜索符合要求的记录。
例
报表视图(report)
用于生成和显示打印或导出的报表,可以基于模板定义报表的结构和样式。一般将报表视图存放在report/目录下。
看板视图(kanban)
用于以卡片形式显示记录,每个卡片代表一个记录,可以根据状态进行分组和拖放操作。
例
菜单(menuitem)
菜单是显示模块的入口。
例