如何快速在odoo中创建自己的菜单
上一篇内容:如何快速创建odoo模块,使用脚手架快速创建自己的odoo应用app
前言
在上一个教程中,我们已经实现了对模块的创建,现在我们要对创建的模块添加内容,这个教程将教你如何在odoo菜单中创建自己的菜单

创建ORM模型
因为odoo在菜单到视图显示的都是数据的内容,如果没有模型类的支持,菜单也不能正常显示,所以我们为了实现功能,先简单做一个brands的品牌表
进入models->models.py文件写入内容
from odoo import models, fields, api class Brands(models.Model):
"""
品牌数据表
"""
# 数据库的名称,名称为fandx_brands,这里的点会在数据库中转换成_
_name = "fandx.brands" # 定义一个char类型字段,string为描述信息,在view视图中会显示
name = fields.Char(string="品牌名称")
在Navicat中的展示

这里会发现除了我们自己创建的name字段以外还有几个字段这里是继承了AbstractModel自动创建的,并且所有的表在创建的时候都会创建这几个字段,如果有需要可以继承这个模型进行创建
- id字段:主键字段
- create_uid字段:创建用户的uid
- create_date字段:数据的创建时间
- write_uid字段:上一次更新的用户uid
- write_date字段:上一次更新的时间
创建菜单视图
在views文件夹下创建menutem.xml文件
<odoo>
<menuitem name="FANDX仓库" id="fandx_stock.menu_root"/>
<menuitem name="品牌管理" id="fandx_stock.menu_1" parent="fandx_stock.menu_root" action="brand_action"/>
<menuitem name="型号管理" id="fandx_stock.menu_2" parent="fandx_stock.menu_root" action="brand_action"/>
<menuitem name="SKU管理" id="fandx_stock.menu_3" parent="fandx_stock.menu_root" action="brand_action"/>
</odoo>
- menuitem标签:为创建菜单的标签
- name属性:就是在菜单显示的内容
- id属性:id标识,这里是唯一的即可
- parent属性:父级,我们在下面定义parent就可以将下面3个子菜单定位在id为fandx_stock.menu_root的页面中了
- action属性:动作,必须制定到对于的act_windows视图上,没有指定则页面不会显示这个菜单功能
在views中创建brand.xml文件
<odoo>
<record id="brand_action" model="ir.actions.act_window">
<field name="name">品牌管理</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fandx.brands</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
- record标签:语法标准,必须要写在最外面
- id属性:id标识,这里是唯一的即可
- model属性:xml会继承IrActionsActWindow的动作模型,odoo会根据模型来渲染视图,我们每一个view都要设置一个基础的act_windows视图
- field->name="name":定义页面的左上角显示内容
- field->name="type":类型
- field->name="res_model":act_windows对应渲染的模型,这里写上我们之前定义的fandx.brands模型即可
- field->name="view_mode":需要渲染的类型,这里先定义tree视图和form视图
在_manifest_.py中刚创建的两个视图
# 加载的视图
'data': [
'....',
'views/brand.xml',
'views/menuitem.xml'
],
- 这里要注意顺序,菜单视图一定要放在最后,act_windows视图放在菜单视图的上面
这个时候你如果去应用中升级了自己的模块,你会发现并没有在左侧菜单中显示,因为我们没有对数据模型进行权限的配置,odoo会默认认为我们的用户没有读取的权限
进入security->ir.model.access.csv文件中替换下面代码
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_fandx_stock_fandx_brands,fandx_stock.fandx_brands,model_fandx_brands,base.group_user,1,1,1,1
- id: 唯一标识,必须唯一
- name: 描述名称,描述信息
- model_id:id:model的id格式是
model_模型类名 - group_id:id : group组的id,这里可以不填,或者写上自己的定义的用户组,以后的教程里会详细讲解group组的权限分配问题
- perm_read:查看
1有权限,0无权限,下面的一样的 - perm_write:修改
- perm_create: 创建
- perm_unlink: 删除
然后在data中打开对应的权限文件的屏蔽
# 加载的视图
'data': [
'security/ir.model.access.csv',
'views/brand.xml',
'views/menuitem.xml'
],
进入应用找到自己的模块去升级
大功告成
如何快速在odoo中创建自己的菜单的更多相关文章
- Odoo中创建模块语句
使用odoo的odoo-bin命令创建模块,比较方便. 进入终端界面(windows中可以是cmd中,linux中可以是$命令提示符下),以下在Windows中为例: python odoo-bin ...
- odoo 动态创建字段的方法
动态创建字段并非一个常见的的需求,但某些情况下,我们确实又需要动态地创建字段. Odoo 中创建字段的方法有两种,一种是通过python文件class中进行定义,另一种是在界面上手工创建,odoo通过 ...
- odoo中def init(self):
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. f ...
- (3)Maven快速入门_3在Eclipse中创建Maven项目打包成jar
Eclipse中创建Maven项目 new ---> maven project ----> next 如下 普通java项目 选择 如下 quickstart 创建项目 : 输入 G ...
- 第一章 使用开发者模式快速入门 Odoo 12
本文为最好用的免费ERP系统Odoo 12开发手册系列文章第一篇. Odoo提供了一个快速应用开发框架,非常适合创建商业应用.这类应用通常用于保留业务记录,增删改查操作.Odoo 不仅简化了这类应用的 ...
- 如何快速搭建自己的ERP系统,4步源码快速安装odoo教程
上一篇内容:了解什么是Odoo,为二次开发做准备 1.下载odoo源码 Github地址:https://github.com/odoo/odoo Gitee地址:https://gitee.com/ ...
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...
- 《HiWind企业快速开发框架实战》(3)使用HiWind创建和管理菜单
<HiWind企业快速开发框架实战>(3)使用HiWind创建和管理菜单 关于HiWind HiWind企业快速开发框架,是基于.NET+EasyUi(支持各种前端扩展,后面将扩展Boot ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...
随机推荐
- nasm astrncat_s函数 x86
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 %define p4 ebp+20 section .text global ...
- Mysql训练:第二高的薪水(IFNULL,OFFSET,LIMIT)
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...
- 注册 Amazon Web Services(AWS) 账号,助园一臂之力
感谢大家去年的大力支持,今年园子继续和 Amazon Web Services(AWS) 合作,只要您通过 博客园专属链接 注册一个账号(建议使用手机4G网络注册),亚马逊就会给园子收入,期待您的支持 ...
- PID算法验证
算法: struct PID { float kp; float kpnfac; float ki; float kinfac; float kd; }; float gCurPPM = 1300; ...
- Linux文本三剑客总结
Linux文本处理三剑客 grep 文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) grep grep: Global search REgula ...
- 《C++ Primer》笔记 第12章 动态内存
shared_ptr和unique_ptr都支持的操作 解释 shared_ptr sp或unique_ptr up 空智能指针,可以指向类型为T的对象 p 将p用作一个条件判断,若p指向一个对象,则 ...
- 《C++ Primer》笔记 第3章 字符串、向量和数组
位于头文件的代码一般来说不应该使用using声明. 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去.与之相反,如果不使用等号,则执行的是直接 ...
- shell脚本,mysql数据库的备份-2[mysqldump]
# 数据库IPIP=127.0.0.1# 数据库端口PORT=3306# 数据库用户USER=root# 数据库密码PASSWORD=****# 要备份的数据库TARGET_DB=database_n ...
- CNN结构演变总结(三)设计原则
CNN结构演变总结(一)经典模型 CNN结构演变总结(二)轻量化模型 前言: 前两篇对一些经典模型和轻量化模型关于结构设计方面的一些创新进行了总结,在本文将对前面的一些结构设计的原则,作用进行总结. ...
- 200-Java语言基础-Java编程入门-005 | Java方法定义及使用
一.方法概述和格式说明 为什么要用方法: 提高代码的复用性 什么是方法: 完成特定功能的代码块 方法的格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { 方 ...