odoo addon开发流程

创建一个addon(插件)

  • 命令如下
python odoo-bin scaffold  插件名   路径
# 例如
python odoo-bin scaffold hh_todo_app myaddons
# 需要将myaddons的路径添加到odoo.conf配置文件的addons_path参数中去
  • 目录结构

开发To-do addon

  1. 创建huah_todo addon
python odoo-bin scaffold huah_todo extra_addons

创建huah_todo addon在extra_addons,需将extra_addons的绝对路径添加到debian/odoo.conf中的addons_path参数中

  1. 编写__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',
],
}
  1. 编写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
  1. 编写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开发流程的更多相关文章

  1. FastAdmin 插件的 Git 开发流程(简明)

    FastAdmin 插件的 Git 开发流程(简明) cms zip 安装 包安装 删除 addons 里的 cms 使用 mklink 软链接到 cms 插件 Git 仓库 修改 cms 插件 gi ...

  2. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  3. 小谈Scrum敏捷开发流程

    一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...

  4. 我理解的Sitecore开发流程

    Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...

  5. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  6. git开发流程、常用命令及工具、TortoiseGit使用及常见问题

    根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...

  7. 软件开发流程 Software development process

    软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联调和测试以 ...

  8. Web开发流程

    知乎上关于Web开发流程豪情给予的回答 web前端开发流程是什么?进行操作会用到哪些便捷的小工具?是先用模板做好,然后在基础上改吗??正常大家说的改框架是不是指的用模板做的网站原文件?前端开发做的文件 ...

  9. 基于Lattice_CPLD/FPGA Diamond 开发流程

         本文主要介绍了Lattice CPLD/FPGA集成开发环境的使用方法,并通过点亮开发板(Mach XO2 Breakout Board)上位号为D2的LED这一实例来演示其开发流程. 1. ...

随机推荐

  1. 为何IntelliJ IDEA比Eclipse更好

    阅读本文大概需要 4.2 分钟. 本文为译文,翻译:彭博 https://www.oschina.net/news/26929 争论 有一些没有唯一正确答案的“永恒”的问题,例如,更好的是:Windo ...

  2. RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken

    RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...

  3. javascript小记四则:用JS写一个滚动横条文字,可以根据需要进行修改;

    网页上的一些广告文字,一直会滚动是怎么做到的,今天给大家演示下,非常简单,源码如下(本案例是在.net平台上,但HTML是通用的): <!DOCTYPE html> <html> ...

  4. MVC 中的@Html.Raw 的用法

    @Html.Raw 定义:在有些情况下,需要显式地渲染一些不应该采用HTML编码的值,这时可以采用Html.Raw方法来保证该值不被编码:简单来说:就是使用了Html.Raw后,字符串会以一个html ...

  5. 如何在Linux服务器和windows系统之间上传与下载文件

    Do not let dream just be your dream. 背景:Linux服务器文件上传下载. XShell+Xftp安装包(解压即用)百度网盘链接:https://pan.baidu ...

  6. MySQL优化面试

    原则:尽量使用整型表示字符串 存储IP INET_ATON(str),address to number INET_NTOA(number),number to address MySQL内部的枚举类 ...

  7. JavaScript基础-4

    4 流程控制 4.1 顺序结构 顺序结构是程序中最简单.最基本的流程控制,他没有特定的语法结构,程序会按照代码的先后顺序执行,程序中大多数的代码都是这样执行的: 4.2 分支结构 if 分支结构 注意 ...

  8. nlp词性标注

    nlp词性标注 与分词函数不同,jieba库和pyltp库词性标注函数上形式相差极大. jieba的词性标注函数与分词函数相近,jieba.posseg.cut(sentence,HMM=True)函 ...

  9. ElasticSearch-6.3.2 linux 安装

    在linux 系统安装ElasticSearch-6.3.2最新版本,也适合6.x 系列版本做参考 前提先在linux 安装好jdk1.8 创建用户 从5.0开始,ElasticSearch 安全级别 ...

  10. Java导出Excel的Springmvc实例

     @RequestMapping(value = "downloadExcel", method = RequestMethod.GET)  public String downl ...