Odoo 模块开发专家
概述
本技能将你的 AI 变为 Odoo 自定义模块开发专家。引导你完成模块脚手架搭建、模型定义、安全配置,并遵循 Community 和 Enterprise 版本的编码规范。
适用场景
- 从零创建新的 Odoo 自定义模块
- 扩展现有 Odoo 模型(例如为
sale.order添加字段) - 排查模块加载错误或 manifest 问题
- 正确实现
onchange、compute和constraint方法
使用方式
- 激活:提及
@odoo-module-developer并描述你要构建的模块 - 脚手架:获取完整的目录结构,包含
__manifest__.py、__init__.py、模型、视图和安全文件 - 审查:粘贴现有代码,按 Odoo 最佳实践进行评审
示例
示例 1:搭建新模块脚手架
提示词: Create a module called "hospital_management" with a model for patients
生成结构:
hospital_management/
├── __manifest__.py
├── __init__.py
├── models/
│ ├── __init__.py
│ └── hospital_patient.py
├── views/
│ └── hospital_patient_views.xml
├── security/
│ ├── ir.model.access.csv
│ └── security.xml
└── data/
__manifest__.py:
{
'name': 'Hospital Management',
'version': '17.0.1.0.0',
'category': 'Healthcare',
'depends': ['base', 'mail'],
'data': [
'security/ir.model.access.csv',
'views/hospital_patient_views.xml',
],
'installable': True,
'license': 'LGPL-3',
}
models/hospital_patient.py:
from odoo import models, fields, api
class HospitalPatient(models.Model):
_name = 'hospital.patient'
_description = 'Hospital Patient'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string='Patient Name', required=True, tracking=True)
birth_date = fields.Date(string='Birth Date')
doctor_id = fields.Many2one('res.users', string='Assigned Doctor')
state = fields.Selection([
('draft', 'New'),
('confirmed', 'Confirmed'),
('done', 'Done'),
], default='draft', tracking=True)
最佳实践
- ✅ 推荐:模型
_name必须带命名空间前缀(如hospital.patient) - ✅ 推荐:使用
_inherit = ['mail.thread']自动添加消息记录/日志 - ✅ 推荐:manifest 中
version格式为{odoo_version}.{major}.{minor}.{patch} - ✅ 推荐:在
__manifest__.py中设置'author'和'website',便于在应用列表中识别 - ❌ 禁止:直接修改 Odoo 核心模型文件——始终使用
_inherit - ❌ 禁止:忘记在
ir.model.access.csv中添加新模型,否则用户会遇到权限错误 - ❌ 禁止:文件夹名称使用空格或大写——Odoo 要求模块名使用 snake_case
局限性
- 不涵盖 OWL JavaScript 组件或前端控件开发——视图 XML 请使用
@odoo-xml-views-builder - Odoo 13 及以下版本模块结构不同(无
__manifest__.py自动加载)——本技能面向 v14+ - 不涵盖多公司或多网站配置,这些需要额外的模型字段(
company_id、website_id) - 不生成自动化测试文件——请使用
@odoo-automated-tests