Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Odoo MiscNew to Visual Studio Code? Get it now.
Odoo Misc

Odoo Misc

lmch

|
245 installs
| (0) | Free
根据名称自动生成Odoo模块、模型、组件、服务,获取js文件的导入路径
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

功能简介

插件支持的功能:

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

使用说明

右键单击对应的目录/文件,在弹出菜单的底部选择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文件中导入相关路径

模块的目录结构:

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__.py与models/__init__.py中。

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

生成的models/sale_order.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 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文件自动写入内容(最后的空行不要删除)

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文件中

生成的代码:

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路径,无需手动创建,插件会自动创建
/** @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文件

生成的代码:

/** @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生成下列导入路径:

import {  } from "@sale_order/services/cos_service";

打开导入文件

  • 配置:先配置Odoo模块的路径,打开vscode的设置,点击工作区,左侧菜单中找到扩展,然后在扩展列表中找到Odoo Misc配置,右侧配置编辑界面点击Add Item,将要搜索的Odoo模块路径添加进去。
  • 使用:在JS文件中选中"@web/views/fields/standard_field_props";,然后点击鼠标右键,在菜单栏点击Odoo Misc: 打开导入文件即可打开导入文件
    • 注意:选中内容的开始与结尾要包含"
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft