功能简介
插件支撑的功能:
创立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模块
点击菜单后,会弹出提示框
- 依据提示,输入模块称号,模块称号假如包括多个单词,运用
_
进行衔接,例如sale_order
- 之后挑选模块对应的Odoo版别,不同的版别的
__manifest__.py
文件会有所不同 - 终究挑选是否包括前端内容,假如包括前端内容,会生成
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="[('时间字段', '>=', 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";