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";
相关推荐
mango大侠18 天前
Ubuntu24.04 安装 visual studio code
ide·vscode·编辑器·visual studio code
故苏呦18 天前
Visual Studio Code 快捷键
visual studio code·visual studio
White graces21 天前
掌握HTML, 从零开始的网页设计
开发语言·前端·windows·edge·html·visual studio code
码农老起21 天前
常用代码开发工具技术分享
git·docker·github·visual studio code·visual studio
草梅友仁24 天前
2024 年第 51 周草梅周报:Windsurf,比 Cursor 更好用的 AI 编辑器
aigc·visual studio code·bun
子洋1 个月前
Mac 下 vscode 更新报错
前端·javascript·visual studio code
Eric_见嘉1 个月前
Cursor 会被打败:使用 Windsurf 一键生成 2048 小游戏
前端·aigc·visual studio code
巫师练法术1 个月前
VScode下构建python的虚拟环境
visual studio code
Yang.992 个月前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3
WXDWIN.2 个月前
C++语言之模版与类型转换
c语言·开发语言·c++·visualstudio·visual studio code