odoo addon开发流程

创建一个addon(插件)

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

开发To-do addon

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

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

  1. 编写__manifest__.py文件
  1. # -*- coding: utf-8 -*-
  2. {
  3. 'name': "huah_todo",# addons在应用栏中的展示名
  4. # 摘要
  5. 'summary': """
  6. Short (1 phrase/line) summary of the module's purpose, used as
  7. subtitle on modules listing or apps.openerp.com""",
  8. # 描述
  9. 'description': """
  10. Long description of module's purpose
  11. """,
  12. # 作者
  13. 'author': "My Company",
  14. # 网站
  15. 'website': "http://www.yourcompany.com",
  16. # Categories can be used to filter modules in modules listing
  17. # Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
  18. # for the full list
  19. 'category': 'Uncategorized',
  20. 'version': '0.1',
  21. # any module necessary for this one to work correctly
  22. # 依赖组件,当继承组件时需要编写,当按照组件时会自动安装依赖,卸载依赖组件时,该组件也会连带卸载
  23. 'depends': ['base'],
  24. # always loaded
  25. # 允许加载的xml文件
  26. 'data': [
  27. # 'security/ir.model.access.csv',
  28. 'views/views.xml',# 编写视图等xml文件
  29. 'views/templates.xml',
  30. ],
  31. # only loaded in demonstration mode
  32. 'demo': [
  33. 'demo/demo.xml',
  34. ],
  35. }
  1. 编写models/models.py
  1. # -*- coding: utf-8 -*-
  2. from odoo import models, fields, api
  3. import datetime
  4. class TaskInfo(models.Model):
  5. _name = 'huah_todo.taskinfo' # _name属性对应该模型在数据库中的表名
  6. _rec_name = 'work_name' # _rec_name显示模型对象时指定显示的字段
  7. work_name = fields.Char(u'工作项目',required=True) # 工作项目字段
  8. work_content = fields.Text(u'工作内容',required=True) # 工作内容字段
  9. # 工作任务开始时间,设置readonly只读不可修改,默认为当前时间
  10. start_time = fields.Datetime(u'开始时间',default=lambda self:fields.Datetime.now(),
  11. readonly=True)
  12. # 结束时间,只读字段,当更改任务状态时才会被修改
  13. end_time = fields.Datetime(u'结束时间',readonly=True)
  14. # 累计用时,只读字段,任务完成时,计算时间差
  15. count_time =fields.Char(u'累计用时',readonly=True)
  16. # 任务状态,选择字段,默认未完成
  17. status = fields.Selection([(1,u'已完成'),(2,u'未完成'),(3,u'已取消')],
  18. string=u'状态',default=2)
  19. # 当前进度,text字段
  20. current_process=fields.Text(u'当前进度')
  21. # 备注
  22. remark = fields.Text(u'备注')
  23. @api.one # 接收一个form对象传入self。
  24. def work_done(self):
  25. """
  26. 前端按绑定work_done方法,改变任务状态并计算用时
  27. :return:
  28. """
  29. self.status=1
  30. self.end_time=datetime.datetime.now()
  31. start_time=datetime.datetime.strptime(self.start_time,'%Y-%m-%d %H:%M:%S')
  32. end_time=datetime.datetime.strptime(self.end_time,'%Y-%m-%d %H:%M:%S')
  33. self.count_time=str((end_time-start_time).seconds//60)+'分钟'
  34. return True
  1. 编写views/views.xml

python odoo-bin scaffold命令创建的views.xml其实都注释了编写xml的示例

  1. <odoo>
  2. <data>
  3. <!-- explicit list view definition -->
  4. <!--
  5. <record model="ir.ui.view" id="huah_todo.list">
  6. <field name="name">huah_todo list</field>
  7. <field name="model">huah_todo.huah_todo</field>
  8. <field name="arch" type="xml">
  9. <tree>
  10. <field name="name"/>
  11. <field name="value"/>
  12. <field name="value2"/>
  13. </tree>
  14. </field>
  15. </record>
  16. -->
  17. <!-- actions opening views on models -->
  18. <!--
  19. <record model="ir.actions.act_window" id="huah_todo.action_window">
  20. <field name="name">huah_todo window</field>
  21. <field name="res_model">huah_todo.huah_todo</field>
  22. <field name="view_mode">tree,form</field>
  23. </record>
  24. -->
  25. <!-- server action to the one above -->
  26. <!--
  27. <record model="ir.actions.server" id="huah_todo.action_server">
  28. <field name="name">huah_todo server</field>
  29. <field name="model_id" ref="model_huah_todo_huah_todo"/>
  30. <field name="code">
  31. action = {
  32. "type": "ir.actions.act_window",
  33. "view_mode": "tree,form",
  34. "res_model": self._name,
  35. }
  36. </field>
  37. </record>
  38. -->
  39. <!-- Top menu item -->
  40. <!--
  41. <menuitem name="huah_todo" id="huah_todo.menu_root"/>
  42. -->
  43. <!-- menu categories -->
  44. <!--
  45. <menuitem name="Menu 1" id="huah_todo.menu_1" parent="huah_todo.menu_root"/>
  46. <menuitem name="Menu 2" id="huah_todo.menu_2" parent="huah_todo.menu_root"/>
  47. -->
  48. <!-- actions -->
  49. <!--
  50. <menuitem name="List" id="huah_todo.menu_1_list" parent="huah_todo.menu_1"
  51. action="huah_todo.action_window"/>
  52. <menuitem name="Server to list" id="huah_todo" parent="huah_todo.menu_2"
  53. action="huah_todo.action_server"/>
  54. -->
  55. </data>
  56. </odoo>
  • 编写菜单
  1. <!-- Top menu item -->
  2. <!--每日事项的一级按钮-->
  3. <menuitem
  4. name="每日事项" #按钮的名字,用来显示在主菜单
  5. id="huah_todo.menu_root" # 按钮唯一标示
  6. action="huah_todo.taskinfo_window"/> #指定要执行的窗口id
  • 编写视图窗口
  1. <record model="ir.actions.act_window" id="huah_todo.taskinfo_window">
  2. <field name="name">每日事项</field> # 窗口的名字
  3. # 指定model,内容为model的_name属性
  4. <field name="res_model">huah_todo.taskinfo</field>
  5. # 自动生成列表视图和form视图
  6. <field name="view_mode">tree,form</field>
  7. </record>
  • 自定义tree视图
  1. <record model="ir.ui.view" id="huah_todo.taskinfo_tree_view"> # id 视图的唯一标示
  2. <field name="name">taskinfo_tree_view</field> # 视图名,可随意定义
  3. <field name="model">huah_todo.taskinfo</field># # 指定模型
  4. <field name="arch" type="xml"> # 声明类型为xml
  5. <tree> #tree标签定义要在tree视图显示的模型字段
  6. <field name="work_name"/>
  7. <field name="start_time"/>
  8. <field name="end_time"/>
  9. <field name="status"/>
  10. <field name="current_process"/>
  11. </tree>
  12. </record>

所有的视图都存在model="ir.ui.view"这张表里。

  • 自定义form视图
  1. <record model="ir.ui.view" id="huah_todo.taskinfo">
  2. <field name="name">taskinfo_form_view</field>
  3. <field name="model">huah_todo.taskinfo</field>
  4. <field name="arch" type="xml"> # 前几行与tree视图类似
  5. <form># form标签用于创建数据时显示的字段
  6. <header> # header标签可定制按钮功能
  7. <button# button按钮的name属性绑定modelwork_done方法
  8. name="work_done"
  9. type="object"
  10. string="已完成"
  11. />
  12. </header>
  13. <sheet> # sheet标签包含单元显示数据
  14. <group># group标签可将字段分组优化显示
  15. <field name="work_name"/>
  16. <field name="work_content"/>
  17. <field name="current_process"/>
  18. <field name="status"/>
  19. <field name="remark"/>
  20. </group>
  21. <group>
  22. <field name="start_time"/>
  23. <field name="end_time"/>
  24. <field name="count_time"/>
  25. </group>
  26. </sheet>
  27. </form>
  28. </field>
  29. </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. SmartSql 快速使用指南

    SmartSql 快速使用指南(https://github.com/Ahoo-Wang/SmartSql) ISmartSqlMapper 常用(部分)接口概述 函数 说明 Execute IDbC ...

  2. React-代码复用(mixin.hoc.render props)

    前言 最近在学习React的封装,虽然日常的开发中也有用到HOC或者Render Props,但从继承到组合,静态构建到动态渲染,都是似懂非懂,索性花时间系统性的整理,如有错误,请轻喷~~ 例子 以下 ...

  3. Flutter 即学即用系列博客——06 超实用 Widget 集锦

    本篇文章我们来讲讲一些比较常用的 Widget. 大家验证的时候使用下面的代码替换 main.dart 代码,然后在 //TODO 语句返回下面常用 Widget 示例的代码. import 'pac ...

  4. 避免SQL全表模糊查询查询

    1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关系 ...

  5. C#保留2位小数几种场景总结

    场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.25.可不可以刚好保留到最后一位不是 ...

  6. Jquery简单学习

    Jquery是一个JavaScript的函数库,Jquery是一个写得少但做的多的轻量级JavaScript库 Jquery用美元$定义. Jquery的action执行对元素的操作 文档就绪函数: ...

  7. 基础知识:if判断、while循环、for循环

    今日学习内容                   1.if 判断(流程控制的一种) 写重复的代码是程序员最不耻的行为,所以我们需要while循环和for循环 ,^_^!                 ...

  8. mybatis bug之org.apache.ibatis.exceptions.PersistenceException:

    详细报错信息: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java. ...

  9. 最新阿里Java技术面试题,看这一文就够了!

    金三银四跳槽季即将到来,作为 Java 开发者你开始刷面试题了吗?别急,小编整理了阿里技术面试题,看这一文就够了! 阿里面试题目目录 技术一面(基础面试题目) 技术二面(技术深度.技术原理) 项目实战 ...

  10. 【MySQL】MySQL的执行计划及索引优化

    我们知道一般图书馆都会建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的. ...