odoo12—开发手册>>P02

第二章基础模块

创建新模块 及其模块介绍

在前面说到,会在项目中创建myaddons来存放我们自己的模块,且在odoo.conf文件内有介绍,odoo自带有海量模块,使用的文件在addons和odoo/addons内,由此总结:odoo内有三部分,odoo自带模块,我们的模块,还有一个就是odoo的第三方商店内的模块,此模块可自行选择购买。

创建第一个模块

在odoo-bin同级文件下执行命令:

python odoo-bin scaffold test1 myaddons

或是在了解模块目录的前提下自行创建文件夹和文件

模块介绍

如图:
在这里插入图片描述
以odoo自带模块为例:
Odoo 自带模块,包括常用模块和额外的模块,由 Odoo 公司提供支持,并默认复制到了安装文件夹下的“addons”中。
建议新建数据库后首先安装“会计”模块,我们以安装“会计”应用模块为例。
在“应用”页面的搜索栏中输入“会计”。
在这里插入图片描述

点击此模块图标可打开这个模块的详细信息窗体。窗体将显示模块的一些有用信息,如最新版本、功能说明等。
“会计和财务”模块窗体
在模块窗体的“技术数据”选项卡中,显示是否包含演示数据、是否已安装、依赖模块的名称及状态等信息。当安装一个模块时,Odoo 会自动选择并安装这个模块的依赖模块。
在这里插入图片描述

文件类型介绍

在这里插入图片描述
1、controllers文件夹为存放接口文件,内为.py文件,可为对外接口或是对内接口,在使用模块时_init_.py文件需要对接口文件进行引用
2、demo文件夹可用于存放此模块的示例数据,示例数据编写格式为键值对形式,且是xml格式,具体可依照demo.xml文件内的写法
3、models文件夹为模块核心所在,也是最基础所在,用于存放此模块业务需求的模型(对应的是postgresql内的表),具体写法可依照系统给出的样例,也可继续阅读下面的章节。
并且在models中也有_init_.py文件,同理写需要对此文件夹内的.py文件进行引用
4、security文件夹用于存放配置模型权限文件,为.csv文件,此文件需要在_manifest_.py文件中引用,在加载模块时必须引用;此文件夹还存放模块角色配置文件,为.xml文件,具体格式继续阅读下面的章节
5、views文件夹用于存放模型视图文件,为.xml文件,具体格式继续阅读下面的章节
6、模块根目录的_init_.py文件,为整体模块对py文件的引入加载和使用
7、manifest.py文件为模块配置文件,格式为键值对形式,对模块名、描述、版本和文件引用的一系列设置

新建模型的讲解

进入models文件夹,打开系统models.py文件
首先引入odoo自带模块(依赖):

from odoo import models, fields, api

建立一个类class,此为面向对象写法,类名为test1,括号内为模型的类型为常规模型:

class test1(models.Model):

设置模型名称:

	_name = 'test1.test1'	

设置模型字段:Char、Integer、Float、Text、Date、Many2one(多对一)、One2many(一对多)、Many2many(多对多)、Selection(下拉选择)为常用字段类型

	name = fields.Char()
	value = fields.Integer()
	value2 = fields.Float(compute="_value_pc", store=True)
	description = fields.Text()
	test1 = fields.Date(string='创建时间', readonly=False, )
	test2 = fields.Many2one('hr.employee', string='申请人', readonly=True, )
	test3 = fields.Many2many('hr.employee', 'oa_oa_approver_hr_employee_rel', string='当前审批人', required=True)
	state = fields.Selection([
	    ('nosubmit', '草稿'),
	    ('noapprove', '待审批'),
	    ('approving', '审批中'),
	    ('ok', '完成'), ('goback', '被驳回'), ('editing', '编辑中'), ('termination', '终止')], string='状态')
	test4 = fields.One2many('oa.flow.line.content', 'line_lvcid', string='流程行')

就此一个模型创建完成

创建新tree视图

<record model="ir.ui.view" id="test1.list">
  <field name="name">test1 list</field>
  <field name="model">test1.test1</field>
  <field name="arch" type="xml">
    <tree>
      <field name="name"/>
      <field name="value"/>
      <field name="value2"/>
    </tree>
  </field>
</record>

标签“record、field”同上,
test1.test1
设置视图用到的模型
在内添加tree视图,tree标签内添加模型字段名称即可
整体tree视图id自定,尽量不重复

创建新form视图

如form(表单视图)不创建,系统会使用默认的form排版

<record id="test1.form" model="ir.ui.view">
    <field name='name'>test1 form</field>
    <field name='model'>test1.test1</field>
    <field name='arch' type='xml'>
        <form string='批量代批'>
            <sheet>
                <group>
                    <group>
                        <field name="substitution_user"/>
                    </group>
                </group>
            </sheet>
            <footer>
                
            </footer>
        </form>
    </field>
</record>

标签同上,tree切换成form,表单内有表头、表身、底部区分,表头一般为顶部按钮和状态组件,表身为表单内容,底部一般使用较少。表身内可使用group标签嵌套,为列、行嵌套,可根据具体需求调整。

创建新视图窗口—action_window

<record model="ir.actions.act_window" id="test1.action_window">
  <field name="name">test1 window</field>
  <field name="res_model">test1.test1</field>
  <field name="view_mode">tree,form</field>
</record>

标签“record、field”,model(将此视图窗口记录存入ir.actions.act_window模型内),id为自定义,field标签意为存入一系列的键值对,键为name,值为test1 window,同理,res_model(此条记录用到的模型),值为test1.test1(tip:此模型为models.py文件内创建的test1.test1),view_mode(视图模型),值为tree,form(列表视图和表单视图)

Tip视图模型:tree,form,kanban,graph,calendar,pivot,activity

创建新菜单

菜单文件存在于视图(views)文件夹,打开系统views.xml,可参照自带内容进行学习
在odoo内模块的进入也属于菜单(模块的顶级菜单):

<menuitem id="menu_root"
          name="Test1"
          web_icon="test1,static/description/test1.png"
          active="True"
          sequence="26" groups="flowmanager.group_flowmanager_user"/>

标签为“menuitem”,配置菜单id,名称name,顶级菜单显示的图片web_icon,也是首页模块的图片,顶级菜单启用active:True,在模块安装界面此模块的排列顺序sequence,配置菜单访问权限groups。

模块内一级菜单:

<menuitem name="Menu 1" id="test1.menu_1" parent="test1.menu_root"/>
<menuitem name="Menu 2" id="test1.menu_2" parent="test1.menu_root"/>

同理,标签,name,id同上,增加parent父级菜单,值为父级菜单id。
同理,二级菜单也是如此,主要是配置父级菜单和在菜单数量多的情况下设置菜单的顺序

有视图的菜单:
以上菜单除顶级菜单有进入模块的动作外,另外两个一级菜单是没有动作的,也就是说点击后不会产生界面变化

<menuitem name="List" id="test1.menu_1_list" parent="test1.menu_1"
          action="test1.action_window"/>

菜单增加action,决定菜单点击跳转的视图窗口,值为视图窗口的id。

有动作的菜单:

<menuitem name="Server to list" id="test1" parent="test1.menu_2"
          action="test1.action_server"/>

将action的值变为服务动作的id后,此菜单即位动作按钮。

权限的设置

1、对模型的权限设置:模型创建完成,必定要为角色设置访问权限,security文件夹为存放模型访问权限配置文件。若自己的模块有自定义角色,可先创建自定义角色,在为此角色配置访问模型的权限,既可以文件配置,当然也可以在软件上设置

模块角色添加:

<record model="ir.module.category" id="flowmanager">
    <field name="name">流程管理</field>
</record>
<!--@name:用户组名,这个或以翻译的-->
<!--@comment:用户组的注释-->
<!--@category_id 用户组所属的模块名-->
<!--@implied_ids 基于哪个用户组,这个层级关系 <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>是最基础的-->
<!--用户名,最初是基于这个,后面一层一层递增,像上面 base.group_hr_user 定义时就是基于最基础-->
<!--@users 预设用户属于这个用户组-->
<record model="res.groups" id="group_flowmanager_user">
    <field name="name">用户</field>
    <field name="category_id" ref="flowmanager"/>
</record>
<record model="res.groups" id="group_flowmanager_manager">
    <field name="name">管理员</field>
    <field name="implied_ids" eval="[(4, ref('flowmanager.group_flowmanager_user'))]"/>
    <field name="category_id" ref="flowmanager"/>
</record>
<record model="res.groups" id="group_flowmanager_js">
    <field name="name">技术</field>
    <field name="implied_ids" eval="[(4, ref('flowmanager.group_flowmanager_user'))]"/>
    <field name="category_id" ref="flowmanager"/>
</record>

菜单权限:

<menuitem id="menu_root"
          name="OA管理"
          web_icon="flowmanager,static/description/oa.png"
          active="True"
          sequence="26" groups="flowmanager.group_flowmanager_user"/>

groups 可添加多个角色,同理视图、按钮、字段都可以以此方法进行设置
模型的增删改查权限:

access_oa_entrust_manager,oa.entrust.manager,model_oa_entrust,group_flowmanager_manager,1,1,1,1
access_oa_entrust_user,oa.entrust.user,model_oa_entrust,group_flowmanager_user,1,1,1,1
access_oa_entrust_rz,oa.entrust.rz,model_oa_entrust,group_flowmanager_js,1,1,1,1

以逗号分隔,第一段:这条数据的id,一般以access打头,后接模型(将“.”换成“”)再接角色名称;第二段:这条数据的名称,模型+角色名称;第三段:模型在ir_model表中的表现形式,odoo内部的转换形式为model+模型(将“.”换成“_”);第四、五六、七段:读,写,增,删权限
模型筛选的权限:

<!--@ name 规则名称-->
<!--@ model_id 依赖的模块-->
<!--@ global 是否是全局-->
<!--@ domain_force 过滤条件-->
<!--@ groups 属于哪个组-->
<record model="ir.rule" id="rule_oa">
    <field name="name">流程单</field>
    <field name="model_id" ref="model_oa"/>
    <field name="global" eval="True"/>
    <field name="domain_force">
        [('message_partner_ids.user_ids.id','parent_of',user.id)]
    </field>
    <field name="groups" eval="[(4,ref('group_flowmanager_user'))]"/>
</record>

同理增加groups键值对即可,后面的值一般以odoo写法添加

2、对模型的权限设置-软件设置:模型的增删改查皆是可控制的
打开开发者模式,进入设置模块,选择“用户&公司”菜单下群组,此处可设置模块角色对模型的一系列设置如:菜单权限、模型对应的视图、模型的增删改查权限、模型的筛选规则权限、或是还可以设置当前模块角色继承其他模块角色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 ERP 简介 1 1.1 Odoo 历史 1 1.2 ERPⅡ 或商业智能化 2 1.2.1 什么是商业智能 4 2 Odoo 框架简介 7 2.1 python 模块分析 8 2.2 python2 还是 python3 8 3 Odoo 的安装和配置 9 3.1 PostgreSQL 数据库 10 3.2 Ubuntu14.04 下可能缺失的软件包 11 3.3 网页显示 node.js 方面 11 3.4 其他问题 12 3.5 通过命令行运行时的配置 12 3.5.1 –xmlrpc-port=8888 12 3.5.2 –addons-path=addons 12 3.5.3 数据库的一些配置 13 3.5.4 –save 13 3.6 将安装环境封装起来 13 3.7 文档编译 14 4 初入 Odoo 17 4.1 管理数据库 17 4.2 登录界面 18 4.3 Administrator 首选项 19 4.4 导入一个翻译 20 4.5 新的 Demo 用户 20 4.6 模块管理 21 4.7 修改公司信息 21 4.8 打开技术特性支持之后 22 4.9 进销存和财务系统的抽象讨论 22 4.9.1 以采购部门为例 23 4.10 安装和配置模块 24 5 创建自己的模块 27 5.1 快速生成模块骨架 27 5.1.1 python 模块的 init 文件 28 5.1.2 作为 Odoo 模块的说明文件 29 5.2 安装自定义模块 32 5.2.1 模块文件夹管理 32 5.3 一个简单的演示模块 33 5.3.1 controllers 33 5.3.2 views 33 5.3.3 models 35 5.3.4 security 37 5.3.5 美化网页 38 5.4 加分项: 通过 pgadmin3 来查看数据库 39 5.4.1 安装 39 5.4.2 连接服务器 39 5.4.3 图形化查询 40 6 Odoo 开发基础: 请假模块第一谈 43 6.1 纯理论讨论 43 6.2 定义模型 45 6.3 加入菜单 46 6.3.1 act_window 的属性 48 6.3.2 menuitem 的属性 48 6.4 视图优化 48 6.4.1 修改 tree 视图 49 6.4.2 修改 form 视图 49 6.5 完整的 views.xml 51 6.6 给模块加个图标 53 7 Odoo 开发基础: 工作计划模块第一谈 55 7.1 数据访问权限管理 61 7.1.1 access rule 62 7.1.2 record rule 62 8 扩展现有模块-继承机制 65 8.1 给模块增加 field 65 8.2 修改已有的 field 66 8.3 重载原模型的方法 66 8.3.1 什么是 Recordset 67 8.3.2 Odoo 里面的 domain 语法 68 8.3.3 recordset 的 search 方法 69 8.4 视图 xml 文件的继承式修改 70 8.4.1 视图元素添加 71 8.4.2 原视图元素属性修改 71 8.5 多态继承 72 8.6 修改其他数据文件 73 8.6.1 删除记录 73 8.6.2 更新数据 73 8.7 委托继承 74 9 理解模型内的数据文件 75 9.1 理解外部 id 75 9.2 使用外部 id 77 9.3 导出或导入数据文件 77 9.4 快捷输入标签 78 9.5 用 field 标签设置值 78 9.5.1 eval 语法 78 9.5.2 ref 属性 79 9.5.3 One2many 和 Many2many 的 eval 赋值 79 10 Odoo 开发基础: 请假模块第二谈 81 10.1 本例涉及到的数据库表格简介 89 10.2 工作流概念入门 89 10.2.1 定义工作流对象 90 10.2.2 创建节点 91 10.2.3 创建连接 91 11 Odoo 模型层详解 93 11.1 _name 93 11.2 各个表头属性 93 11.3 name 字段 94 11.4 具体模型的数据 94 11.5 模型间的关系 95 11.6 工作流 95 12 Odoo 视图层详解 97 13 附录 99 13.1 Odoo 里老的 API 99 13.2 PostgreSQL 数据库命令行操作 99 13.2.1 命令行数据库备份 99 13.3 反向代理 (reverse proxy) 99 13.3.1 安装 ngnix 软件 100 13.3.2 强制 https 连接 102 13.3.3 nginx 优化 102 13.3.4 轮询机制 102 13.4 跟踪项目源码初始化进程 102 13.4.1 base 模块 104 13.4.2 web 模块 105 13.4.3 web_kanban 模块 105 13.5 配置会计科目 105 13.5.1 配置会计科目类型 105 13.5.2 配置会计科目 106 13.6 分录 106 13.7 新建业务伙伴 106 13.7.1 新建业务伙伴标签 106 13.7.2 新建客户 106 13.8 创建新的产品 107 13.9 设置会计年度 107 13.10向供应商下单 107 13.11会计学入门 107 13.11.1财务报表 108 13.11.2原始凭证 108 13.11.3账户 108 13.11.4分类帐 109 13.11.5会计科目表 109 13.11.6报告期间 110 13.12参考资料 110

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值