功能简介

插件支撑的功能:

  • 创立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,点击装置,如下图所示:

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

运用说明

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

  • 创立Odoo模块:单击模块需求存放的目录
  • 创立Model,单击Odoo模块目录
  • 承继Model,单击Odoo模块目录
  • 创立OWL组件,单击Odoo模块目录
  • 创立Web服务,单击Odoo模块目录
  • 获取导入途径,单击Odoo模块static/src/目录下的js文件
vscode:运用插件快速生成Odoo模块、模型、组件

创立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__.pymodels/__init__.py中。

  • 留意:models/__init__.pyir.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";