Odoo | 入门 | (1)-包与结构(基于Odoo12)

创建一个Odoo包(Module)

1. 简介

odoo的模块均以包(module)为基础管理,在odoo系统中我们可以选择性的安装需要的包。
将包中的内容加载进数据库,进而达到新增逻辑或者修改逻辑的目的。

2. 包组成

1. 业务对象
    一般Odoo的python文件定义的class类,会根据config配置文件自动加载

2. 视图对象
    将定义的业务对象内容,通过网页视图的方式展现出来 

2. 数据文件
    主要有XML或CSV两种文件类型,包括视图views定义文件、报表reports定义文件、权限屏蔽、
    记录股则、演示数据和其他
   
3. 路由控制
    处理来自网络浏览器的路由请求

4. 静态文件
    网页文件需要加载的图片、CSS、JS等静态文件

3. 包结构

odoo文件中有一个odoo-bin.py文件,通过执行它提供的命令行,可以快速创建一个odoo包结构:
odoo-bin scaffold module_name module_save_address
注意:执行时,需要对应的python环境支持,如果本地python环境不是odoo使用的python环境,请
手动切换(比如:MAC+Anaconda -> source activate py36  注:py36是我启动odoo的虚拟环境)

相应虚拟环境Anaconda了解请挪步 Python - Anaconda.

例如我的odoo-bin.py文件在 C:/odoo/odoo-bin,我要快速创建一个新的odoo包放在C:/odoo_extends目录下:
source activate py36 (MAC) 或 activate py36 (WIN) 
C:/odoo/odoo-bin scaffold demo01 C:/odoo_extends 

Odoo12-新手村任务(1)

__manifest__.py
    name: 包名称
    summary: 包简介
    description: 包详细说明
    author: 作者
    website:关联的网站
    category:包类别
    version:包版本
    depends:包依赖
    data:包配置常用数据文件
    demo:包配置演示数据文件
    qweb:静态文件配置
    installable:是否可安装
    application:是否应用类
    auto_install:是否自动安装
    
__init__.py
    from . import controllers
    from . import models

controllers
    odoo - 浏览器网络请求路由文件包

models
    odoo - python业务文件包

views
    odoo - XML显示视图文件包
   
security
    odoo - 权限屏蔽、记录规则文件包
    
demo
    odoo - demo初始数据文件包

4. 对象关系映射

为了避免大量sql的编写,提高开发效率、高扩展性和安全性,Odoo提供了对应的ORM机制

业务对象都通过继承odoo.models.Model类,实现实体Odoo的model类,系统自动持久化数据结层。
在定义一个模型类(model)的时候,最重要的是必须要定义一个_name属性,它在odoo文件系统中
必须唯一。

数据库会同步将_name字符串的点(.)变成(_)存储在数据库中
# 简单的例子
from odoo import models
class MinimalModel(models.Model):
_name = 'test.model'

5. 模型类(model)字段

在model中定义的odoo.fields扩展内容(字段),将作为当前model的属性。
# 简单的例子
from odoo import models, fields
class LessMinimalModel(models.Model):
    _name = 'test.model2'
    name = fields.Char()
字段通用属性
字段可以去使用一些ORM定义好的通用属性:
string:字段视图显示名称
required:单据创建时,字段必须输入值
help:字段帮助信息
index:对当前字段在数据库对应的列 创建字段索引
...
字段类型
Odoo目前支持两种类型的基础字段:
    1. 较为简单直接存储在当前model表中的基础字段:Char、Integer、Float、Boolean、Date、Datetime
    2. 关系字段(数据库外键): Many2one、One2many、Many2many
    字段后面会在专题中学习和说明
保留字段
Odoo默认给每个model创建几个预制字段,在Oracle EBS中叫做5个who字段:
1. id:默认给当前模型创建一个id自增序列字段
2. create_date(Datetime类型):记录创建时间
3. create_uid(Many2one类型):记录的创建人
4. write_date(Datetime类型):记录最后一次修改时间
5. write_uid(Many2one类型):记录最后一次修改人
特殊字段
odoo的每个model必须有一个name,它用于在视图界面上显示名称,如果没有name或者想指定显示成其他字段的名称
可以使用 _rec_name = 'field_name'
from odoo import models, fields, api

class Course(models.Model):
    _name = 'openacademy.course'
    _description = "OpenAcademy Courses"

    name = fields.Char(string="Title", required=True)
    description = fields.Text()
数据文件
Odoo是一个高度数据驱动的系统,我们可以通过XML预制模型数据(初始化数据条目)
xml中使用<record>标签去创建或者更新数据记录
<odoo>
    <record model="{model name}" id="{record identifier}">
        <field name="{a field name}">{a value}</field>
    </record>
</odoo>
1. model是当前Odoo的model类_name内容
2. id是个在整个系统中唯一的标识名称
3. <field>标签中name是model中的字段名

定义好的XML单据要在__manifest__.py文件中注册,如果是业务记录放在data字典中,如果是演示数据记录放在demo字典中
<odoo>
    <record model="openacademy.course" id="course0">
        <field name="name">Course 0</field>
        <field name="description">Course 0's description Can have multiple lines
        </field>
    </record>
    <record model="openacademy.course" id="course1">
        <field name="name">Course 1</field>
        <!-- no description for this one -->
    </record>
    <record model="openacademy.course" id="course2">
        <field name="name">Course 2</field>
        <field name="description">Course 2's description</field>
    </record>

</odoo>

6. 动作(Actions)和菜单(Menus)

动作和菜单是一些会更新到数据库的固定记录,所以一般写在XML文件中(记得注册),动作会有三种触发方式:
1. 点击菜单按钮,如果菜单按钮上绑定动作,将执行对应的动作
2. 点击视图上定义的按钮,如果按钮绑定了动作,将执行对应的动作
3. 作为对象的上下文动作

因为菜单申明有些复杂,所以我们可以使用一个简短的<menuitem>标签来定义ir.ui.menu的模型记录,而且
绑定动作更为方便
<odoo>
    <!--省略Tree视图定义-->
    <!--省略Form视图定义-->
    <!--动作-->
    <record model="ir.actions.act_window" id="action_list_ideas">
        <field name="name">Ideas</field>
        <field name="res_model">idea.idea</field>
        <field name="view_mode">tree,form</field>
    </record>
    <!--菜单-->
    <menuitem id="menu_ideas" parent="menu_root" name="Ideas" sequence="10"
              action="action_list_ideas"/>
</odoo>
注意:action动作必须定义在menu菜单之前,XML数据文件的执行是按照流程加载的,如果顺序错误会报错
找不到动作记录。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特本特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值