* 官方建议模块骨架
--------------------------
addons//
│─ __init__.py
│- __openerp__.py
│- controllers
│ │- __init__.py
│ │- main.py
│- data
│ │- _data.xml
│ │- _demo.xml
│
│- models
│ │- __init__.py
│ │- .py
│ │- .py
│
│- security
│ │- ir.model.access.csv
│ │- _security.xml
│
│- static
│ │- img
│ │- lib
│ │- src
│ │ │- js
│ │ │- css
│ │ │- less
│ │ │- xml
│- views
│ │- _templates.xml
│ │- _views.xml
文件夹权限755 文件权限644
__openerp__.py 相关属性:
# name 模块名字
# summary 简短介绍
# description 详细描述
# author 作者
# website 模块网站
# category 模块分类
# version 模块版本号
# license 模块版本信息 默认是 AGPL-3
# depends 模块依赖
# data 模块必须加载的数据文件
# demo 示例数据
# installabel 默认为True 可安装
# auto_install 默认是False 如果设为True 就根据依赖模块,依赖装了,这个模块就安装
# application 默认是 False 如果设为True 就成为应用模块
安装自定义模块
服务启动配置文件 addons-path 加入自己的定义容器目录 如 myaddons
addons-path=addons,myaddons
更新模块服务列表,然后找到去安装
模块文件夹管理
# data 放 demo 和 data xml
# models 放模型定义
# controllers http 路径控制
# views 放网页视图和模板
# static 放网页的资源,里面还有css, js ,img, lib 等
#
--------------------------
todo_app
│ - security
│ | - ir.model.access.csv
│ | - todo_access_rules.xml
│ - static
│ - __init__.py
│ - __openerp__.py
│ - todo_model.py
│ - todo_view.xml
* __init__.py 内容如下(把模型导入到应用)
from . import todo_model
* __opererp__.py 内容如下(erp本身的配置)
--------------
{
'name':'To-Do Application',
'description': 'Manage your personal Tasks with this module.',
'author': 'Toby Chen',
'depends': ['mail'],
'application': True,
'category':'todo_app',
'data': [
'todo_view.xml',
'security/ir.model.access.csv',
'security/todo_access_rules.xml',
],
}
--------------
* todo_model.py 内容如下(模型)
--------------
# -*- coding: utf-8 -*-
from openerp import models,fields,api
class TodoTask(models.Model):
_name='todo.task'
name = fields.Char('Description', required=True)
is_done = fields.Boolean('Done?')
active = fields.Boolean('Active?', default=True)
@api.one
def do_toggle_done(self):
self.is_done = not self.is_done
return True
@api.multi
def do_clear_done(self):
done_recs = self.search([('is_done','=','True')])
done_recs.write({'active':False})
return True
--------------
* todo_view.xml内容如下(视图)
--------------
name="To-do Task"
res_model="todo.task"
view_mode="tree,form" />
name="To-Do Task"
parent="mail.mail_feeds"
sequence="20"
action="action_todo_task" />
To-do Task Form
todo.task
string="Toggle Done" class="oe_highlight"/>
string="Clear All Done"/>
To-do Task Tree
todo.task
To-do Task Filter
todo.task
domain="[('is_done','=',False)]"/>
domain="[('is_done','!=',False)]"/>
--------------
* ir.model.access.csv 内容如下()
-------------------
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_todo_task_group_user,todo.task.user,model_todo_task,base.group_user,1,1,1,1
-------------------
* todo_access_rules.xml
-----------------
ToDo Tasks only for owner
[('create_uid','=',user.id)]
-----------------
* 可以到系统的本地模块中找到 去安装
* 开服务时要以升级模块
./odoo.py -d v8dev -u todo_app 用模块的目录
* 升级完,最好重启一下odoo的服务,不容易报错
====================================
再来一小段
模型
class Fruit(models.Model):
_name = 'mymodule.fruits'
name = fields.Char()
加一个演示数据 demo.xml
apple
banana
pear
看一下控制器
from openerp import http
class Mymodule(http.Controller)
@http.route('/mymodule/mymodule',auth='public')
def index(self,**kw)
fruits = http.request.env('mymodule.fruits')
return http.request.render("mymodule.index",{'fruits':fruits.search([])})
视图
MyModule上面的页面展示只有数据,不好看,可以用 website builder模块美化
__openerp__.py 加上
'depends':['website']
控制器加上
@http.route('/mymodule/mymodule', auth='public' website=True)
视图文件修改
MyModule
采用了 t-call 调用标准模板 用 t-set 设置属性值 加了oe_structrue 和 container 类