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. ...
随机推荐
- 为何IntelliJ IDEA比Eclipse更好
阅读本文大概需要 4.2 分钟. 本文为译文,翻译:彭博 https://www.oschina.net/news/26929 争论 有一些没有唯一正确答案的“永恒”的问题,例如,更好的是:Windo ...
- RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken
RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...
- javascript小记四则:用JS写一个滚动横条文字,可以根据需要进行修改;
网页上的一些广告文字,一直会滚动是怎么做到的,今天给大家演示下,非常简单,源码如下(本案例是在.net平台上,但HTML是通用的): <!DOCTYPE html> <html> ...
- MVC 中的@Html.Raw 的用法
@Html.Raw 定义:在有些情况下,需要显式地渲染一些不应该采用HTML编码的值,这时可以采用Html.Raw方法来保证该值不被编码:简单来说:就是使用了Html.Raw后,字符串会以一个html ...
- 如何在Linux服务器和windows系统之间上传与下载文件
Do not let dream just be your dream. 背景:Linux服务器文件上传下载. XShell+Xftp安装包(解压即用)百度网盘链接:https://pan.baidu ...
- MySQL优化面试
原则:尽量使用整型表示字符串 存储IP INET_ATON(str),address to number INET_NTOA(number),number to address MySQL内部的枚举类 ...
- JavaScript基础-4
4 流程控制 4.1 顺序结构 顺序结构是程序中最简单.最基本的流程控制,他没有特定的语法结构,程序会按照代码的先后顺序执行,程序中大多数的代码都是这样执行的: 4.2 分支结构 if 分支结构 注意 ...
- nlp词性标注
nlp词性标注 与分词函数不同,jieba库和pyltp库词性标注函数上形式相差极大. jieba的词性标注函数与分词函数相近,jieba.posseg.cut(sentence,HMM=True)函 ...
- ElasticSearch-6.3.2 linux 安装
在linux 系统安装ElasticSearch-6.3.2最新版本,也适合6.x 系列版本做参考 前提先在linux 安装好jdk1.8 创建用户 从5.0开始,ElasticSearch 安全级别 ...
- Java导出Excel的Springmvc实例
@RequestMapping(value = "downloadExcel", method = RequestMethod.GET) public String downl ...