vscode:使用插件快速生成Odoo模块、模型、组件

功能简介

插件支持的功能:

  • 创建Odoo模块
  • 创建Model,根据模型名称创建Python代码以及视图代码
  • 继承Model,根据模型名称创建Python代码
  • 创建OWL组件,在目录static/src/components下创建组件代码模板,根据选择的类型生成不同的组件模板,支持的类型:action/field/common
  • 创建Web服务,在static/src/services目录下生成服务代码模板
  • 获取导入路径,选择Odoo模块static/src/目录下的js文件,可以自动生成导入路径
  • 提供一些代码片段。vscode插件市场中有很多关于odoo代码片段的插件(搜索关键词odoo snippets
    • owhk: 导入OWL中定义的Hooks
    • owlc: 导入OWL的声明周期函数
    • ohk: 导入Odoo Web中定义的Hooks(不是全部,只导入一些比较常见的)
    • opatch: 对组件进行patch

插件安装

vscode插件市场中搜索odoo misc,点击安装,如下图所示:

使用说明

右键单击对应的目录/文件,在弹出菜单的底部选择Odoo Misc菜单,然后单击具体的子菜单。

  • 创建Odoo模块:单击模块需要存放的目录
  • 创建Model,单击Odoo模块目录
  • 继承Model,单击Odoo模块目录
  • 创建OWL组件,单击Odoo模块目录
  • 创建Web服务,单击Odoo模块目录
  • 获取导入路径,单击Odoo模块static/src/目录下的js文件

创建Odoo模块

点击菜单后,会弹出提示框

  1. 根据提示,输入模块名称,模块名称如果包含多个单词,使用_进行连接,例如sale_order
  2. 之后选择模块对应的Odoo版本,不同的版本的__manifest__.py文件会有所不同
  3. 最后选择是否包含前端内容,如果包含前端内容,会生成static目录,以及在__manifest__.py文件中导入相关路径

模块的目录结构:

text 复制代码
sale_order/
|-- models/
|   |-- __init__.py
|-- security/
|   |-- ir.model.access.csv
|-- static/
|   |-- description/
|   |-- src/
|-- views/
|-- wizard/
|   |-- __init__.py
|-- __init__.py
|-- __manifest__.py

创建Model

点击菜单后,在弹出的输入框中输入模型名称,模型名称使用.分割,例如sale.order。输入完成后点击回车,即可生成模型的python代码、视图代码,还会在ir.model.access.csv文件中添加权限,视图文件与Python文件会自动添加到__manifest__.pymodels/__init__.py中。

  • 注意:models/__init__.pyir.model.access.csv文件末尾需要保留空行

生成的models/sale_order.py文件

py 复制代码
import logging

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

_logger = logging.getLogger(__name__)


class SaleOrder(models.Model):
    """
    """
    _name = 'sale.order'
    _description = ''

生成的views/sale_order_views.xml文件

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <!-- sale.order 列表视图 -->
    <record id="sale_order_view_tree" model="ir.ui.view">
        <field name="name">sale.order.view.tree</field>
        <field name="model">sale.order</field>
        <field name="arch" type="xml">
            <tree>

            </tree>
        </field>
    </record>
    <!-- sale.order 表单视图 -->
    <record id="sale_order_view_form" model="ir.ui.view">
        <field name="name">sale.order.view.form</field>
        <field name="model">sale.order</field>
        <field name="arch" type="xml">
            <form string="">
                <header></header>
                <sheet>
                    <group string="隐藏字段" invisible="1">
                        <field name="id"/>
                    </group>
                    <group>
                        <group>

                        </group>
                        <group>
                        </group>
                    </group>
                </sheet>
            </form>
        </field>
    </record>
    <!-- sale.order 搜索视图 -->
    <record id="sale_order_view_search" model="ir.ui.view">
        <field name="name">sale.order.view.search</field>
        <field name="model">sale.order</field>
        <field name="arch" type="xml">
            <search string="">
                <field name=""/>
                <filter string="当前月份" name="this_month" domain="[('时间字段', '&gt;=', context_today().strftime('%Y-%m-01'))]"/>
            </search>
        </field>
    </record>
    <!-- sale.order.act_window -->
    <record id="sale_order_action" model="ir.actions.act_window">
        <field name="name"></field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">sale.order</field>
        <field name="view_mode">tree,form</field>
        <field name="target">current</field>
    </record>
</odoo>

ir.model.access.csv文件自动写入内容(最后的空行不要删除)

csv 复制代码
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_sale_order_user,sale_order_user,model_sale_order,,1,1,1,0
access_sale_order_manager,sale_order_manager,model_sale_order,,1,1,1,1
,,,,,,,

继承Model

点击菜单后,在弹出的输入框中输入要继承的模型名称,以.分割,例如product.template,输入完成后,点击回车,即可生成模型的Python代码,以及自动写入到models/__init__.py文件中

生成的代码:

py 复制代码
import logging

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

_logger = logging.getLogger(__name__)


class ProductTemplate(models.Model):
    """
    """
    _inherit = 'product.template'

创建OWL组件

点击菜单后,在弹出的输入框中输入组件名称,名称以空格进行分割,例如image field。之后选择组件模板类型,比如选择field类型,最终生成的代码:

  • 如果模块下没有static路径,无需手动创建,插件会自动创建
js 复制代码
/** @odoo-module **/

import { registry } from "@web/core/registry";
import { standardFieldProps } from "@web/views/fields/standard_field_props";

export class ImageField extends Component {
    setup() {

    }
}

ImageField.template = "sale_order.ImageField";
ImageField.components = {};

ImageField.props = {
    ...standardFieldProps,
};
ImageField.defaultProps = {};
ImageField.extractProps = ({ attrs }) => {
    return {

    };
};

ImageField.displayName = "";
ImageField.supportedTypes = [""];

registry.category("fields").add("image", ImageField);

创建Web服务

点击菜单后,在弹出的输入框中输入服务名称,使用空格进行分割,例如cos service,完成后输入回车,会生成static/src/services/cos_service.js文件

生成的代码:

js 复制代码
/** @odoo-module */

import { registry } from "@web/core/registry";

export const cosService = {
    dependencies: ["rpc", "orm"],
    async start(env, { rpc, orm }) {

        return {  };
    },
};

registry.category("services").add("cosService", cosService);

获取导入路径

选择static/src/**/*路径下的js文件,右键单击文件,点击获取导入路径菜单项,文件的导入路径会自动复制到剪切板。

  • 注意:只有点击static/src/**/*路径下的.js类型的文件才会显示该菜单

比如点击sale_order/static/src/services/cos_service.js生成下列导入路径:

js 复制代码
import {  } from "@sale_order/services/cos_service";
相关推荐
eason_fan4 小时前
如何实现一个VSCode插件(Cygwin Terminal 插件实践)
前端·visual studio code
椒盐菠萝5 小时前
Visual Studio Code 命令行工具 `code` 配置指南
visual studio code·命令行
萌萌哒草头将军2 天前
💎这么做,cursor 生成的代码更懂你!💎
javascript·visual studio code·cursor
阿豪啊2 天前
VSCode AI三大模式,Copilot与通义灵码对比指南
人工智能·visual studio code
仓粟4 天前
Code Helper (Plugin) 吃掉了我的内存:一次 VSCode 插件内存暴涨排查实录
visual studio code
全宝6 天前
🧑‍💻[2025最新]用oh-my-posh打造个性化终端
程序员·操作系统·visual studio code
阿里云云原生6 天前
Python3 AI 通义灵码 VSCode插件安装与功能详解
后端·python·visual studio code
Selicens6 天前
VSCode Snippets 魔改专属的 vue 代码片段
vue.js·visual studio code
阿里云云原生6 天前
Python2 AI 通义灵码 VSCode插件安装与功能详解
python·visual studio code
lilye666 天前
程序化广告行业(71/89):ABTester与Tag Manager系统深度解析
visual studio code·odps