my_addons ├─ __init__.py #--------Py代码由init加载 ├─ __manifest__.py #----模块声明文件,包含声明、加载数据名和指令 ├─ controllers #--------网站控制器,定义web访问的返回,也常用于IoT │ ├─ __init__.py │ └─ controllers.py ├─ data #---------------初始化数据文件目录 ├─ demo #------------带演示数据的数据文件,可用于测试、培训或模块评测 │ └─ demo.xml ├─ i18n #---------国际化文件目录,有翻译文件,可供用户使用时切换语言 ├─ models #----代码核心,包含我们的各种模型 │ ├─ __init__.py │ └─ models.py ├─ security #------------权限控制目录 │ └─ ir.model.access.csv #不同用户分组相应model对象的查改增删权限 ├─ static #-----------静态资源目录。特别是web所需的固定图片和页面等 └─ views #-------视图文件目录。决定models目录下model的前端界面呈现 ├─ templates.xml └─ views.xml
*目录示例,并不固定
*models文件夹包含模块核心代码——模型
*views文件夹包含前端各种视图展示逻辑
1.1 常用目录
api/ 提供外部调用接口
controllers/ 包含控制器
data/ 演示和实际数据的xml
doc/ 重点说明
i18n/ 语言目录
models/ 模型定义
report/ 存放报表相关的python对象和xml
security/权限,规则,对象操作权限定义(读取,创建,删除,修改)
static/ 包含页面相关的,一般划分为css, less,js,img,xml,grf,安装后浏览器可以直接访问文件夹下的文件
tests/ 存放python和yml测试用例
views/ 包含视图和模板
wizard/ 放临时的model和视图
demo/ 测试数据
edi/ 数据交换
rubylong/ 锐浪报表
- manifest.py
# -*- coding: utf-8 -*-
{
'name': 'App name',#模块的标题
'summary': '摘要',#模块的子标题
'version': '1.0',#版本号
'category': '类别',#模块的分类,在设置->用户&公司->群组中"应用"字段中可以看到
'sequence': 0,#模块在apps中的排列的序号,影响展示顺序
'author': 'App author',#作者
'website': 'www.yourconpanywebsite.com',#以上为module基本信息
'depends': ['base'],#你的module依赖
'data': [
'security/ir.model.access.csv',#引用你security文件夹下的权限文件
'views/views.xml',#引用你views文件夹下的视图文件
],
'demo': [
],#加载demo文件
'qweb': [
],#加载qweb template文件
'installable': True,#是否可安装
'application': True,#: 是否是应用,在应用列表中,被应用筛选隔离,好的开发习惯应该谨慎考虑是否是应用
'auto_install': False,#是否自动安装
'description': """ # 模块的描述性文字
""",
}
其中,重点是data键里的声明,新建或文件多了时容易漏,在data里面需要注意加载的文件顺序。
- init.py
from . import models
- views.xml
- models.py & init.py
models.py
# -*- coding: utf-8 -*-
from dtcloud import models
class test1(models.Model):#这是一个模型对象
_name = 'test1.test1'#模型内部标识符
print('hello dtcloud')
init.py
from . import models #引入加载的.py文件夹
- ir.model.access.csv
每个模型都需要设置权限
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_test1_test1_user,test1.test1,model_test1_test1,,1,1,1,1
id:权限id,默认规则是access_模块名_类名
name:权限名,默认规则是模块名.类名
model_id:id :这个是固定写法,规则是model_模块名_类名
group_id:id :组id
perm_read,perm_write,perm_create,perm_unlink
对应读、写、增加、删除权限,1是有权限,0是无权限,具体根据需要来设置权限
*第一行为格式,第二行为test1 model的权限设置
DTCloud中,一切皆模型,连视图都是模型。DTCloud将各种数据,如:权限数据、类数据、视图数据等,按照模型分表存储,然后在查看时,按照索引从各个表格读取信息,组合成我们看到的内容。
2.1 模型的属性模型内置属性:可以使用一些内置属性来定义模型的一些特性:
_name :创建DTCloud模型的内部标识符,必含项。
_description :当用户界面显示模型时,一个方便用户的模型记录标题。
_rec_name:用来指出引用关联字描述记录的字段,例如多对一关系。 默认情况下,它使用name:字段,这是模型中常见的字段。但是这个属性允许我们使用任何其他字段来实现这个目的。
_inherit :继承。
_inherits :委托继承。
DTCloud模型被保存在一个中央注册中心,它可以引用实例中可用的所有模型类,并且它可以被一个模型名引用。在我们编写的模型方法代码中,可以通过 self.env[‘x’] 获取一个代表model x的类的引用。(相当于spring托管对象)
模型名称很重要,因为它们是用于访问注册中心的。模型名称的约定规则:用点分隔的小写字母列表。
模型名称必须是全局唯一。
1)基本模型models.Model
绝大多数DTCloud模型中,类都是基于models.Model类的。 这种类型的模型具有永久的数据库持久性:为它们创建数据库表,并且它们的记录被存储,直到被显式删除。
2)瞬态模型models.TransientModel
通常用于向导(wizard)。 它们的数据仍然存储在数据库中,但是临时的,一个清理作业定期从这些表中清除旧数据。
3)抽象模型models.AbstractModel
不存储数据,不会在数据库创建表。 抽象模型作为可重用的功能集,利用DTCloud的继承功能,混入到其他模型。通常用于定义接口或者用作报表模型。
常通过关系字段(Many2one、One2many、Many2many)建立模型关系。命名字段时,有以下约定:以_id、_ids为结尾命名的字段,分别对应的是Many2one和One2many的关系。



