odoo10 addon开发流程
odoo addon开发流程
创建一个addon(插件)
- 命令如下
python odoo-bin scaffold 插件名 路径
# 例如
python odoo-bin scaffold hh_todo_app myaddons
# 需要将myaddons的路径添加到odoo.conf配置文件的addons_path参数中去
- 目录结构

开发To-do addon
- 创建huah_todo addon
python odoo-bin scaffold huah_todo extra_addons
创建huah_todo addon在extra_addons,需将extra_addons的绝对路径添加到debian/odoo.conf中的addons_path参数中
- 编写__manifest__.py文件
# -*- coding: utf-8 -*-
{
'name': "huah_todo",# addons在应用栏中的展示名
# 摘要
'summary': """
Short (1 phrase/line) summary of the module's purpose, used as
subtitle on modules listing or apps.openerp.com""",
# 描述
'description': """
Long description of module's purpose
""",
# 作者
'author': "My Company",
# 网站
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
# 依赖组件,当继承组件时需要编写,当按照组件时会自动安装依赖,卸载依赖组件时,该组件也会连带卸载
'depends': ['base'],
# always loaded
# 允许加载的xml文件
'data': [
# 'security/ir.model.access.csv',
'views/views.xml',# 编写视图等xml文件
'views/templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
}
- 编写models/models.py
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import datetime
class TaskInfo(models.Model):
_name = 'huah_todo.taskinfo' # _name属性对应该模型在数据库中的表名
_rec_name = 'work_name' # _rec_name显示模型对象时指定显示的字段
work_name = fields.Char(u'工作项目',required=True) # 工作项目字段
work_content = fields.Text(u'工作内容',required=True) # 工作内容字段
# 工作任务开始时间,设置readonly只读不可修改,默认为当前时间
start_time = fields.Datetime(u'开始时间',default=lambda self:fields.Datetime.now(),
readonly=True)
# 结束时间,只读字段,当更改任务状态时才会被修改
end_time = fields.Datetime(u'结束时间',readonly=True)
# 累计用时,只读字段,任务完成时,计算时间差
count_time =fields.Char(u'累计用时',readonly=True)
# 任务状态,选择字段,默认未完成
status = fields.Selection([(1,u'已完成'),(2,u'未完成'),(3,u'已取消')],
string=u'状态',default=2)
# 当前进度,text字段
current_process=fields.Text(u'当前进度')
# 备注
remark = fields.Text(u'备注')
@api.one # 接收一个form对象传入self。
def work_done(self):
"""
前端按绑定work_done方法,改变任务状态并计算用时
:return:
"""
self.status=1
self.end_time=datetime.datetime.now()
start_time=datetime.datetime.strptime(self.start_time,'%Y-%m-%d %H:%M:%S')
end_time=datetime.datetime.strptime(self.end_time,'%Y-%m-%d %H:%M:%S')
self.count_time=str((end_time-start_time).seconds//60)+'分钟'
return True
- 编写views/views.xml
python odoo-bin scaffold命令创建的views.xml其实都注释了编写xml的示例
<odoo>
<data>
<!-- explicit list view definition -->
<!--
<record model="ir.ui.view" id="huah_todo.list">
<field name="name">huah_todo list</field>
<field name="model">huah_todo.huah_todo</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="value"/>
<field name="value2"/>
</tree>
</field>
</record>
-->
<!-- actions opening views on models -->
<!--
<record model="ir.actions.act_window" id="huah_todo.action_window">
<field name="name">huah_todo window</field>
<field name="res_model">huah_todo.huah_todo</field>
<field name="view_mode">tree,form</field>
</record>
-->
<!-- server action to the one above -->
<!--
<record model="ir.actions.server" id="huah_todo.action_server">
<field name="name">huah_todo server</field>
<field name="model_id" ref="model_huah_todo_huah_todo"/>
<field name="code">
action = {
"type": "ir.actions.act_window",
"view_mode": "tree,form",
"res_model": self._name,
}
</field>
</record>
-->
<!-- Top menu item -->
<!--
<menuitem name="huah_todo" id="huah_todo.menu_root"/>
-->
<!-- menu categories -->
<!--
<menuitem name="Menu 1" id="huah_todo.menu_1" parent="huah_todo.menu_root"/>
<menuitem name="Menu 2" id="huah_todo.menu_2" parent="huah_todo.menu_root"/>
-->
<!-- actions -->
<!--
<menuitem name="List" id="huah_todo.menu_1_list" parent="huah_todo.menu_1"
action="huah_todo.action_window"/>
<menuitem name="Server to list" id="huah_todo" parent="huah_todo.menu_2"
action="huah_todo.action_server"/>
-->
</data>
</odoo>
- 编写菜单
<!-- Top menu item -->
<!--每日事项的一级按钮-->
<menuitem
name="每日事项" #按钮的名字,用来显示在主菜单
id="huah_todo.menu_root" # 按钮唯一标示
action="huah_todo.taskinfo_window"/> #指定要执行的窗口id
- 编写视图窗口
<record model="ir.actions.act_window" id="huah_todo.taskinfo_window">
<field name="name">每日事项</field> # 窗口的名字
# 指定model,内容为model的_name属性
<field name="res_model">huah_todo.taskinfo</field>
# 自动生成列表视图和form视图
<field name="view_mode">tree,form</field>
</record>
- 自定义tree视图
<record model="ir.ui.view" id="huah_todo.taskinfo_tree_view"> # id 视图的唯一标示
<field name="name">taskinfo_tree_view</field> # 视图名,可随意定义
<field name="model">huah_todo.taskinfo</field># # 指定模型
<field name="arch" type="xml"> # 声明类型为xml
<tree> #tree标签定义要在tree视图显示的模型字段
<field name="work_name"/>
<field name="start_time"/>
<field name="end_time"/>
<field name="status"/>
<field name="current_process"/>
</tree>
</record>
所有的视图都存在model="ir.ui.view"这张表里。
- 自定义form视图
<record model="ir.ui.view" id="huah_todo.taskinfo">
<field name="name">taskinfo_form_view</field>
<field name="model">huah_todo.taskinfo</field>
<field name="arch" type="xml"> # 前几行与tree视图类似
<form># form标签用于创建数据时显示的字段
<header> # header标签可定制按钮功能
<button# button按钮的name属性绑定model的work_done方法
name="work_done"
type="object"
string="已完成"
/>
</header>
<sheet> # sheet标签包含单元显示数据
<group># group标签可将字段分组优化显示
<field name="work_name"/>
<field name="work_content"/>
<field name="current_process"/>
<field name="status"/>
<field name="remark"/>
</group>
<group>
<field name="start_time"/>
<field name="end_time"/>
<field name="count_time"/>
</group>
</sheet>
</form>
</field>
</record>
运行示例:
tree视图控制列表视图要显示的字段:
form视图控制创建数据时的显示:

点击已完成按钮会执行model的work_done方法修改结束时间和累计用时字段

odoo10 addon开发流程的更多相关文章
- FastAdmin 插件的 Git 开发流程(简明)
FastAdmin 插件的 Git 开发流程(简明) cms zip 安装 包安装 删除 addons 里的 cms 使用 mklink 软链接到 cms 插件 Git 仓库 修改 cms 插件 gi ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- 我理解的Sitecore开发流程
Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...
- 软件开发流程 Software development process
软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联调和测试以 ...
- Web开发流程
知乎上关于Web开发流程豪情给予的回答 web前端开发流程是什么?进行操作会用到哪些便捷的小工具?是先用模板做好,然后在基础上改吗??正常大家说的改框架是不是指的用模板做的网站原文件?前端开发做的文件 ...
- 基于Lattice_CPLD/FPGA Diamond 开发流程
本文主要介绍了Lattice CPLD/FPGA集成开发环境的使用方法,并通过点亮开发板(Mach XO2 Breakout Board)上位号为D2的LED这一实例来演示其开发流程. 1. ...
随机推荐
- 【Zabbix】CentOS6.9系统下部署Zabbix-server 3.0
目录 安装Zabbix 关闭selinux 删除旧版本MySQL5.1数据库 安装MySQL 5.6数据库 安装PHP 5.6 Zabbix-server的部署安装 1.安装Yum源 2.安装Zabb ...
- myeclipse配置tomcat服务器
在进行j2EE开发时,需要进行服务器配置, 这里因为要进行servlet开发,也要配置服务器.这里以在myeclipse上配置tomcat服务器为例 这里只是做下记录,方便自己以后查看 1.打开mye ...
- JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密
JS实现客户端的网页加密解密技术,可用作选择性隐蔽展示.当然客户端的加密安全度是不能与服务器相提并论,肯定不能用于密码这类内容的加密,但对于一般级别的内容用作展示已经够了. JS加密与解密的解决方案有 ...
- 用v-bind:style时的问题
今天纠结了挺久一个问题,个人习惯是在HBuilder里先写好前端样式,在放.net去测试数据,但是发现一个问题 就是一个提示框跟随鼠标移动 提示框用v-bind:style绑定一个对象 DIV就是这句 ...
- 常用vi编辑器命令行
游标控制: h 游标向左移 j 游标向下移 k 游标向上移 l(or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...
- Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式
首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...
- MongoDB学习(查找文档和其他数据查找操作)
理解Cursor对象和查询运算符 cursor对象 cursor对象相当于一个指针,可通过迭代它来访问MongdoDB数据库中的一组对象. 在使用 find() 方法查询时,返回的并非实际文档,而是一 ...
- HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
集合类 key value super 说明 HashTable 不能为null 不能为null Dictionary 线程安全 ConcurrentHashMap 不能为null 不能为null A ...
- 从零开始搭建服务器部署web项目
前言 该教程旨在完整描述建站过程,会将博主踩过的坑尽量详细的罗列出来.整个建站流程相对较为庞大,因此做了分解,同时适合大家有针对性的查询感兴趣的部分. 一.如何拥有自己的云服务器. 二.域名的购买与解 ...
- OrmLite-更符合面向对象的数据库操作方式
1. jar包下载 下载地址:http://ormlite.com/releases/,一般用core和android包即可. 如果使用的是android studio,也可以直接通过module s ...