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";
相关推荐
芯橦8 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
行十万里人生5 天前
信号处理: Block Pending Handler 与 SIGKILL/SIGSTOP 实验
c++·后端·深度学习·ubuntu·serverless·信号处理·visual studio code
奇点 ♡7 天前
【线程】线程安全的单例模式
linux·c语言·c++·安全·单例模式·visual studio code
羊小猪~~9 天前
C/C++语言基础--C++运算符重载以及其重载限制
java·c语言·开发语言·c++·visualstudio·visual studio code
豆包MarsCode10 天前
豆包MarsCode IDE 搭建 VitePress 博客并使用 GitHub 部署
ide·人工智能·python·数据分析·github·visual studio code
奇点 ♡11 天前
【线程】POSIX信号量---基于环形队列的生产消费者模型
linux·运维·服务器·开发语言·c++·算法·visual studio code
自白11 天前
关于我是如何二次开发了 antd-vue 的a-range-picker组件,同时还添加了 vscod智能提示这件事
vue.js·visual studio code·ant design
奇点 ♡15 天前
【线程】线程的控制
linux·运维·c语言·开发语言·c++·visual studio code
羊小猪~~20 天前
C/C++语言基础--从C到C++的不同(上)
linux·c语言·c++·后端·qt·visualstudio·visual studio code
就是蠢啊24 天前
VScode 的简单使用
visual studio code