odoo基本模块的开发

7 篇文章 0 订阅

1.模块目录

__manifest__.py:模块的配置文件

data:数据文件存储目录

models:模型存放的目录

security:权限配置文件存放目录

views:视图数据存放目录

2.__manifest__.py中的信息

# -*- coding: utf-8 -*-
{
    'name': "模块名字",
    'license': 'Other proprietary',
    'version': '版本',

    'summary': """
        模块摘要""",

    'description': """
        模块描述信息
    """,

    'author': "作者",
    'website': "网站",
    'category': '模型类型',

    # any module necessary for this one to work correctly
    'depends': [''], # 当前模块依赖的模块

    # always loaded
# 数据文件列表,视图、权限文件路径需要放在data中,主要菜单的xml文件必须放在其他视图xml文件之后
    'data': [
        
    ],
    # only loaded in demonstration mode
    'demo': [
    ],
# 是否可安装
    'installable': True,
# 是否可应用
    'application': True,
# 是否字段安装
    'auto_install': False,
# 模块安装完成后执行方法函数
    # 'post_init_hook': '_create_srm_table',
}

3.__init__.py文件

导入models

from . import models

4.models模型开发

4.1 __init__.py文件

导入models目录下创建的模板文件

from . import asset_category
from . import asset_transaction_type
from . import asset_period

4.2 模板文件案例

from odoo import models, fields, api


class EnoAssetPeriod(models.Model):
    _name = 'eno.asset.period'
    _description = '资产期间'
  
    name = fields.Char(string='名称', required=True)
    asset_period_status = fields.Selection([('open', '打开'), ('done', '关闭')], string='资产期间状态', default='open')
    date_form = fields.Date(string='开始日期', required=True)
    date_to = fields.Date(string='结束日期', required=True)
    company_id = fields.Many2one(comodel_name='res.company', string='关联公司', default=lambda self: self.env.company,
                                 required=True)


   

_name:模板名称属性

_description:模型描述信息

4.2.1 常见字段类型

1.fields.Integer:整数类型

2.fields.Float:浮点数类型

3.fields.Char:字符串类型

4.fields.Date:日期类型。

5.fields.Datetime:时间类型

6.fields.Selection:列表类型。

7.fields.Reference:参考字段类型。该类型是selection类型的延伸,用于存储关联表数据行

8.fields.Many2one:多对一字段类型。表关联多对一结构。

9.fields.One2many:一对多字段类型。和fields.Many2one多对一字段类型相对应

10.fields.Many2many:多对多字段类型。多对多表结构设置。

注意:多对一、一对多、多对多字段定义时以xxxx_id进行命名

4.2.2 常见字段属性

1.string:页面显示的字段标签名称。缺省则显示字段本身

2.help页面显示的字段提示信息。缺省则显示字段本身

3.readonly:字段只读参数。默认为False,设置为True时,页面该字段不可编辑。

4.required:字段必输参数。默认为False,设置为True时,页面该字段必输,数据表该字段不能为空。

5.index:字段索引参数。默认为False,设置为True时,数据表该字段建立索引。

6.default:字段默认值参数。缺省为空。可设置固定值或者带返回值方法。

7.store:可存储参数。普通字段默认为True,字段值存储数据库表中。computed字段,默认为False,不在数据库表中存储字段的值

8.compute:计算字段参数。设置该参数的字段为计算字段,该字段的值由配置的计算方法计算得出。

9.related:引用字段参数。设置了该参数的字段相当于是配置字段的一个复制字段

10.domain:domain表达式。通常用来筛选数据记录。它们使用特殊的语法,以便于Odoo ORM 将它们解析后生成对应的SQL WHERE数据库筛选语句。

5.views视图开发

odoo框架的视图使用xml进行编写开发,主要是图有tree  form  search  action menu data kanban 日历 甘特,值得注意的是每一个xml视图文件需要在___manifest__.py的data中进行定义。

5.1 tree视图

以列表形式展示多条数据,根元素是<tree>,其中包裹任意field,每一个field就是列表 中的一列

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
       
        <record model="ir.ui.view" id="id需要唯一">
            <field name="name">视图名</field>
            <field name="model">模型名</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
 <!--显示的字段-->
                <tree>
                    <field name="name"/>
                    <field name="asset_period_status"/>
                    <field name="date_form"/>
                    <field name="date_to"/>
                    <field name="company_id"/>
                </tree>
            </field>
        </record>
    </data>
</odoo>

5.1.1 tree部分属性介绍

editable:默认,选择列表视图的行打开对应的 表单视图。editable 属性让视图本身在原处可编辑。

有效的值有 top 和 bottom,让新记录分别出现在列表的顶部或底部。

default_order:重载视图的顺序,替换模型的默认顺序。值为一个字段的逗号分隔列表,后接 desc 来进行反向排序:

create, edit, delete, duplicate, import, export_xlsx:允许通过设置相应属性为 false来在视图中禁用相应的动作

attrs:基于记录值的动态属性。属性对作用域的映射,作用域在当前行记录的上下文中运行,如为True ,在单元格中设置相应属性。

button:在列表单元格中显示按钮

context:在执行按钮的Odoo调用时合并入视图的上下文

confirm:在进行按钮的 Odoo 调用之前显示的(供用户接受的)确认消息

field:定义相应字段应针对每条记录显示的列(name、string、invisible、groups、widget、attrs、width、groupby、name、string、context括号中的属性均可使用)   

5.2 form视图

表单视图用于显示单条记录的数据。它们的根元素是<form>。它们由带有额外结构和语法组件的常规 HTML所组成。

<record id="唯一id" model="ir.ui.view">
            <field name="name">视图名</field>
            <field name="model">模型</field>
            <field name="arch" type="xml">
                <form string="显示字段">
                    <sheet>
                        <group col="4">
                            <field name="name"/>
                            <field name="asset_period_status"/>
                            <field name="date_form"/>
                            <field name="date_to"/>
                            <field name="company_id" domain="[('id','in',allowed_company_ids)]" options="{'no_open': True,'no_create': True}"/>
                        </group>
                    </sheet>
                </form>
            </field>
        </record>

5.2.1 form部分属性介绍

notebook:定义标签区块。每个标签通过一个 page 子元素进行定义

page:页标签

group:用于定义表单中的列布局

newline:仅在 group元素中可用, 提前结束当前行并立即切换到新行 (不预先填入任何剩余列)

separator:小的横向空格,带 string 属性时作为区块的标题

sheet:可用于 form的直接子元素,针对更窄或更具响应式的表单布局

header:与sheet拼接,在表单上方提供全宽的位置,通常用于显示工作流按钮及状态小组件

button:对Odoo系统进行调用,类似于表单视图按钮。

field:渲染(并在可能时允许编辑)当前记录的单个字段(name、widget、options、class、oe_inline、groups、attrs、domain、context、readonly、required、nolabel、placeholder、password括号中的属性均可使用)   

5.3 search搜索视图

搜索视图是此前那些视图类型的分解,在其中不显示内容,虽然它们应用于具体的模型,却用于过滤其它视图的内容(通常为 列表视图 或 图形视图等的聚合视图)。除用例的这种不同外,它们的定义方式相同。Search:在列表视图中提供搜索功能,根元素是<search>

<record id="唯一id" model="ir.ui.view">
            <field name="name">search</field>
            <field name="model">模型</field>
            <field name="arch" type="xml">
                <search>
<!--搜索类型-->
                    <field name="name"/>
                    <field name="number"/>
<!--筛选类型-->
                    <filter string="固定资产类别" name="capitalization"
                            domain="[('asset_type', '=', 'capitalization')]"/>
                    <filter string="无形资产类别" name="intangible_assets"
                            domain="[('asset_type', '=', 'intangible_assets')]"/>
           <!--分组类型-->
         <group>
                        <field string="上级类别" name="parent_id" context="{'group_by':'parent_id'}"/>
                    </group>
                    <group>
                        <field string="归口管理部门" name="admin_dept_id" context="{'group_by':'admin_dept_id'}"/>
                    </group>
                </search>
            </field>
        </record>

5.3.1 search部分属性介绍

field:字段定义含用户提供值的域或上下文

name:待过滤的字段名

string:字段的标签

operator:属性允许根据字段类型重载默认运算符 (如针对浮点字段的= 、针对字符字段的ilike )

filter_domain:用作字段搜索作用域的完整域,可使用 self 变量来在自定义域中注入所提供的值。可用于生成比运算符 本身灵活得多的作用域 (如同时对多个字段的搜索)

groups:让字段仅有特定用户可用

filter:过滤器是搜索视图中预定义的切换,仅能启用或禁用。其主要目的是向搜索上下文添加数据(对搜索/过滤的数据视图传递的上下文),或向搜索视图添加版块。

context:一个Python字典,合并入动作的作用域来生成搜索作用域

separator:可用于在简单搜索视图中分隔过滤器组

searchpanel:允许在任意多个记录视图的左侧显示搜索面板)   

5.4 动作视图

Action,在odoo中翻译成动作,顾名思义就是相当于一个连接菜单、按钮和前端页面跳转已经一些后台方法调用的开关,odoo中的动作有五种,分别是窗口动作、URL动作、报表动作、服务器动作以及客户端动作。

<record id="唯一id" model="ir.actions.act_window">
            <field name="name">动作名</field>
            <field name="res_model">模型</field>
            <!--视图类型-->
            <field name="view_mode">tree,form</field>
          
        </record>

5.4.1 部分属性介绍

res_model:用于展示视图的模型

views:(view_id, view_type) 对的列表。每组的第二个元素是视图的分类 (tree, form, graph, …) ,第一个是可选的数据库 id (或 False)。若未提供 id,客户端应获取对所请求模型指定类型的默认视图(默认通过fields_view_get()来实现). 列表的第一个类型是默认视图类型列表,在动作执行时会默认打开。每个视图类型在列表中最多出现一次。

res_id :若默认视图为 form,指定要加载的记录(否则应创建一条新记录)

search_view_id :(id, name) 对, id 为针对动作所加载的指定搜索视图的数据库标识符。默认获取模型的默认搜索视图

target :是否应在主内容区 (current)中以全屏模式(fullscreen)或对话框/弹窗(new)中打开视图。使用 main 代替 current 来清除面包屑导航。默认为current

context、domain、limit:字面意思

view_mode :(默认= tree,form )视图类型的逗号分隔列表作为字符串(/!\ 无空格 /!\)。所有这些类型会在生成的views 列表中出现 (至少有一个False view_id)

view_id:在类型是view_mode列表的一部分且没有由view_ids中的视图进行填充时,添加到 views 中的指定视图  

5.5 菜单视图

关联系统整体结构,进入查看详细层级数据页面。一级菜单,二级菜单...,父级菜单:不需要挂载动作

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <menuitem sequence="01" name="资产" id="eno_asset_menu"/>
        <menuitem sequence="06" name="资产设置" id="eno_asset_setting_menu" parent="eno_asset_menu"/>
        <menuitem sequence="01" name="资产类别" id="eno_asset_category_menu" parent="eno_asset_setting_menu"
                  action="view_eno_asset_category_action"/>
        <menuitem sequence="02" name="事务处理类型" id="eno_asset_transaction_type_menu" parent="eno_asset_setting_menu"
                  action="view_eno_asset_transaction_type_action"/>
        <menuitem sequence="03" name="资产期间" id="eno_asset_period_menu" parent="eno_asset_setting_menu"
                  action="view_eno_asset_period_action"/>

    </data>
</odoo>

5.5.1 部分属性介绍

name:显示名称,如果没有设置 name 属性,那么就从这个 menu 对应的 action 的 name,如果没有 action,就使用 id

action:点击这个菜单所触发的动作

parent:层级关系,如果设置了 parent 属性,那么它的值应该是另一个 menu item 的 external id 如果没有设置 parent ,将会尝试从 name 属性中 按照 / 来分隔,找到对应的层级来创建,如果找不到,就依次创建对应的 menu item

sequence:排序

groups:指定哪个组可以看见此菜单

5.6 初始化数据

初始化数据文件一般放在data文件夹

<record>标签用可以初始化任何存储模型的数据

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="1">
        <record id="eno_asset_transaction_type_asset_addition" model="模型">
            <field name="name">资产增加</field>
            <field name="code">asset_addition</field>
            <field name="note">资产增加</field>
        </record>
      
       
    </data>
</odoo>

5.6.1 部分属性介绍

id:数据唯一外部ID

model:数据写入模型

field:初始化模型的字段值

6. security权限目录

在此目录下包括txt文件,里面包含了对模型的权限控制

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
唯一id,name,模型,组,读,改,写,删

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
发出的红包

打赏作者

Echo.....

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值