环境问题
psycopg2-binary==2.9.9
python-ldap==3.4.0
gevent==22.10.2
环境问题。 最后使用的是conda环境
python odoo-bin -c odoo.conf -i base
- 使用了conda环境
- 执行命令:
python odoo-bin -c odoo.conf -i base
开发顺序
- 打开视图
- 添加菜单
- 自定义表单
- 自定义树
- 自定义脚手架安装
开发者模式
- 进入开发者模式:
?debug=1
修改配置
- 修改配置文件添加addons
- 重新启动Odoo:
./odoo-bin -c ./odoorc.ini
- 刷新本地模块列表
脚手架安装
- 使用脚手架安装模块:
../odoo-bin scaffold my_module addons
模块
- 模块用于设计应用和数据的集合
- 模块文件说明:
-
- __init__.py:这是一个空文件,用于标识模块所在的文件夹是一个Python包。
- __manifest__.py:模块的清单文件,包括模块的标题、描述以及要加载的数据文件等信息。
- controllers/controllers.py:控制器文件,
- 作用:定义模块的Web控制器,处理HTTP请求和路由。
- demo/demo.xml:演示数据文件,包含上述示例模型的演示记录。这里定义了模块的演示数据。
- models/models.py:模型文件,包含模型及其字段的示例。这里定义了模块的数据模型。
- security/ir.model.access.csv:访问控制列表数据文件,定义了哪些用户组可以访问模块中的数据。
- views/templates.xml:模板文件,
- 作用:定义模块的用户界面视图,包括树视图、表单视图、搜索视图等。
- menus.xml
- 定义模块的菜单结构,包括导航菜单、子菜单、操作按钮等。您可以在此文件中创建菜单项,指定菜单的名称、图标、访问权限以及与之关联的视图或操作
关于字段
One2many
字段命名:用_ids
结尾Many2many
字段命名:用ids
结尾
多记录方法 和 1tm mt1 mtm
- 多记录方法:适用于同时处理多个记录的情况
many2one
定义 Many2one 字段除了需要指明关联的模型外,还有一个参数叫 ondelete,它指明了「当关联的用户删除后」当前的模型应该做什么操作。ondelete 主要有以下几个值:
- set null当用关联用户删除后,user_id 字段设置为空。
- restrict限制关联的用户删除,当用户被删除时会提示报错。
- cascade级联删除,当用户删除时,将关联的 categroy数据删除。 ⚠️ 使用这种模式时要严格考虑数据的重要性,最好不要随便使用
class Department(models.Model):
_name = 'company.department'
name = fields.Char(string='Name') # 部门名称
manager_id = fields.Many2one('res.users', string='Manager')
# 部门经理(多对一,关联模型为res.users)
employee_ids = fields.One2many('company.employee', 'department_id', string='Employees')
# 部门员工(一对多,关联模型为company.employee,关联字段为department_id)
class Employee(models.Model):
_name = 'company.employee'
name = fields.Char(string='Name') # 员工姓名
department_id = fields.Many2one('company.department', string='Department')
# 所属部门(多对一,关联模型为company.department)
mtm
class Author(models.Model):
_name = 'library.author'
name = fields.Char(string='Name')
class Book(models.Model):
_name = 'library.book'
name = fields.Char(string='Title')
author_ids = fields.Many2many('library.author', 'book_author_rel', string='Authors', relation='library_book_author_rel')
# 第一个参数为对应的关联 关联模型 ,第二个参数为他们两个的中间表明 如果不写,则默认是两个表名后接_rel
-
- 这对于需要在多个记录上执行相同操作的情况非常有用。
计算字段
- 通过装饰器
@api.depends
指定计算字段所依赖的字段 compute
参数用于指定计算字段的计算方法
- compute 参数:
-
- compute 是一个字段的参数,用于指定计算字段的计算方法。
- 当你在模型中定义一个计算字段时,你需要指定一个方法,该方法将在每次需要计算该字段的值时被调用。
- 这个方法通常被称为“计算方法”或“计算函数”。
- 计算字段:
-
- 计算字段是一种特殊类型的字段,它的值不是直接存储在数据库中,而是根据其他字段的值动态计算得出的。
- 你可以使用 compute 参数来定义计算字段,并指定一个方法来计算该字段的值。
- 示例:
-
- 在你提供的代码中,current 字段是一个计算字段。它的值不是直接从数据库中获取的,而是通过 _compute_current 方法计算得出的。
- 每当涉及到 current 字段的值时,Odoo 将自动调用 _compute_current 方法来计算该值。
调试填入的形参:
-c odoo.conf --dev=all --log-level=info
示例代码解释
from odoo import models, fields, api
class Bangumi(models.Model):
_name = 'bangumi.bangumi'
_description = 'Bangumi'
我们的模型类的类属性定义了,_name 和 _description 分别是这个模型类的名称和描述。
定义 _name 是要遵守一个不成文的规定,格式一般为 {addon_name}.{model_name} 其中 addon_name 为你的应用或模块的名字,model_name 为模型的名字,例如: project 模块中的 Project 模型的 _name 为 project.project,hr 模块中 LeaveReport 则为 hr.leave.report,以上均参考至官方应用中的模型。
- 解释了示例代码中的字段含义和参数
访问数据库管理界面
- 访问地址:
http://localhost:8067/web/database/manager
manifest.py 文件
- 描述了addon的基本信息,如名称、描述、作者等
控制器(controllers)
- 用于编写Web控制器
Demo数据(demo)
- 存放模块安装后的初始化演示数据
数据模型(models)
- 用于编写ORM数据模型
权限定义(security)
- 存放权限定义文件
视图定义(views)
- 存放模块的视图定义文件
交互式shell模式
- 启动命令:
./odoo-bin shell -c ./odoo.conf
- 保存: env.cr.commit()
Many2one字段
- 用法示例:关联到Odoo的用户模型
res.users
- 参数
ondelete
指明了关联模型删除后当前模型的操作方式
模块升级
- 使用参数
-u
在启动时升级模块
Required属性
required
属性用于指示字段是否为必需字段