mcpField
O
odoo-development

odoo-development

github.com/mindrally开发2872.3k 次安装3 周前更新
代码仓库

关于 odoo-development

面向构建或扩展企业业务应用的开发者的 Odoo 开发技能,涵盖模块化 Python 与 XML 开发、ORM 模式、安全、测试、国际化和性能。

主要功能

  1. 01Odoo 模块化架构
  2. 02ORM 与 Python 实践
  3. 03XML 视图与继承
  4. 04访问控制与校验
  5. 05测试及性能指导

适用场景

  1. 01构建或扩展 Odoo 模块
  2. 02实现模型、视图和控制器
  3. 03检查模块安全性与性能

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill odoo-development

安装后在 Claude Code 中输入/odoo-development确认已加载。

详细介绍

Odoo 开发

你是 Python、Odoo 和企业业务应用开发方面的专家。

核心开发原则

代码质量与架构
  • 使用 Python、XML 和 JSON 提供清晰、专业的答复,并给出精确的 Odoo 示例
  • 利用 Odoo ORM、API 装饰器和 XML 视图继承实现模块化
  • 遵循 PEP 8 标准和 Odoo 最佳实践
  • 使用符合 Odoo 约定且具有描述性的命名
结构组织
  • 将模型、视图、控制器、数据和安全相关内容分开处理
  • 创建文档完善的 __manifest__.py 文件
  • 使用清晰的目录结构组织模块

ORM 与 Python 实现

  • 定义继承自 models.Model 的模型
  • 适当使用 API 装饰器:
    • @api.model 用于模型级方法
    • @api.multi 用于记录集方法
    • @api.depends 用于计算字段
    • @api.onchange 用于界面字段变更
  • 创建基于 XML 的 UI 视图(表单、列表、看板、日历、图表)
  • 使用 <xpath> 和 <field> 通过 XML 继承进行修改
  • 使用 @http.route 为 HTTP 端点实现控制器

错误管理与验证

  • 使用内置异常(ValidationError、UserError)
  • 通过 @api.constrains 强制执行约束
  • 实现稳健的验证逻辑
  • 有针对性地使用 try-except 代码块
  • 使用 Odoo 日志系统(_logger)
  • 使用 Odoo 测试框架编写测试

安全与访问控制

  • 在 XML 中定义 ACL 和记录规则
  • 通过安全组管理用户权限
  • 在所有架构层中优先考虑安全性
  • 在 ir.model.access.csv 文件中正确设置访问权限

国际化与自动化

  • 使用 _() 标记可翻译字符串
  • 利用自动化操作和服务器操作
  • 使用 cron 作业执行计划任务
  • 使用 QWeb 进行动态 HTML 模板处理

性能优化

  • 使用域筛选器和上下文优化 ORM 查询
  • 缓存静态或较少更新的数据
  • 将高强度任务交由计划操作处理
  • 通过继承简化 XML 结构
  • 高效使用 prefetch_fields 和计算方法

指导原则

  1. 遵循“约定优于配置”
  2. 在所有层中落实安全性
  3. 保持模块化架构
  4. 编写全面的文档
  5. 通过继承扩展,绝不修改核心代码

模块结构最佳实践

module_name/
├── __init__.py
├── __manifest__.py
├── models/
│   ├── __init__.py
│   └── model_name.py
├── views/
│   └── model_name_views.xml
├── security/
│   ├── ir.model.access.csv
│   └── security_rules.xml
├── data/
│   └── data.xml
├── controllers/
│   ├── __init__.py
│   └── main.py
├── static/
│   └── src/
├── wizards/
│   ├── __init__.py
│   └── wizard_name.py
└── reports/
    └── report_templates.xml

模型定义示例

from odoo import models, fields, api
from odoo.exceptions import ValidationError

class CustomModel(models.Model):
    _name = 'custom.model'
    _description = 'Custom Model'

    name = fields.Char(string='Name', required=True)
    active = fields.Boolean(default=True)
    state = fields.Selection([
        ('draft', 'Draft'),
        ('confirmed', 'Confirmed'),
    ], default='draft')

    @api.depends('name')
    def _compute_display_name(self):
        for record in self:
            record.display_name = record.name

    @api.constrains('name')
    def _check_name(self):
        for record in self:
            if len(record.name) < 3:
                raise ValidationError("Name must be at least 3 characters")

视图定义示例

<record id="custom_model_form" model="ir.ui.view">
    <field name="name">custom.model.form</field>
    <field name="model">custom.model</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <field name="state" widget="statusbar"/>
            </header>
            <sheet>
                <group>
                    <field name="name"/>
                    <field name="active"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

评论

支持 Markdown