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. Node.js - 阿里Egg的多进程模型和进程间通讯

    前言 最近用Egg作为底层框架开发项目,好奇其多进程模型的管理实现,于是学习了解了一些东西,顺便记录下来.文章如有错误, 请轻喷 为什么需要多进程 伴随科技的发展, 现在的服务器基本上都是多核cpu的 ...

  2. 配置Nginx部署静态资源和自动跳转到https

    一.首先在阿里云后台添加域名解析: 二.两个网站的静态资源在以下目录: /www/temp/blog/public 三.在服务器端配置nginx: cd /etc/nginx/conf.d 添加两个文 ...

  3. AspNetCore 基于AOP实现Polly的使用

    前言   说起AOP,其实我们在做MVC/API 的时候应该没少接触,比如说各种的Fitter 就是典型的AOP了. 本来在使用Polly的时候我最初的打算是使用过滤器来实现的,后来发现实现起来相当的 ...

  4. DSAPI TreeView节点增删简化操作

    将一行或多行字符串添加到TreeView控件. 函数: 控件.TreeView控件.添加路径节点到TreeView(要添加节点的TreeView控件,字符串或字符串数组) 示例:将一个多行文本添加到T ...

  5. c# List根据某个属性进行分类,变成以属性名称作为分类的多个List

    在平时的开发中,我们从数据库中得到List列表,但是我们希望可以根据属性名称再次进行分类. 其实LINQ中已经内置相应的算法. 长话短说,直接上代码: var dataList = JsonHelpe ...

  6. EF 外键不显示、如何让外键显示!增、删、改 操作时,外键不显示,只显示导航属性!

    一.问题描述:EF 外键不显示.如何让外键显示!增.删.改 操作时,外键不显示,只显示导航属性! EF 添加.增加.插入数据时,外键不显示! 二.解决方案:在根据数据库生成模型的时候,选中“在模型中” ...

  7. vue中的tab栏切换内容变换

    <!DOCTYPE html> <html lang="cn-zh"> <head> <meta charset="UTF-8& ...

  8. ArcEngine ILabelEngineLayerProperties Expression 添加常量

    ArcEngine实现复杂标注的时候,需要结合几个字段并将常量加载表达式中. 开始的时候发现VBScript需要采用“”来括起来常量才能在VB中正常使用,但是 ILabelEngineLayerPro ...

  9. 小米平板6.0以上系统如何不用Root激活Xposed框架的步骤

    在异常多公司的引流,或业务操作中,大多数需要使用安卓的神一般的Xposed框架,几天前我们公司买来了一批新的小米平板6.0以上系统,大多数都是基于7.0以上版本,大多数不能够获取Root超级权限,虽然 ...

  10. 荣耀5.0以上手机(亲测有效)激活xposed框架的经验

    对于喜欢搞机的朋友而言,大多时候会使用到xposed框架及其种类繁多功能强悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活xposed框架是非常简便的,但随着系统版本的不断迭 ...