odoo之学习第一个例子test(1)
2017-07-04 11:19
435 查看
(环境搭建已经完成)
一、MVC目录架构(使用pycharm开发工具)
二、源码
1、controller._init_.py
2、controller.controllers
3、models._init_.py
4、models.models.py
这里我们定义了test对象模型,包含四个属性name ,value,value2,description。在模块安装完成后,odoo的ORM框架会自动把这个对象映射到数据库表。属性类型会映射到表字段数据类型,表名是
5、views.templates.xml
6、views.views.xml
7、test._init_.py
8、test._manifest_.py
这是整个模块的配置文件,配置项从字面上很容易理解。
name:模块名,会显示在模块列表中。
summary:摘要,在模块详情显示。
description:描述,在模块详情显示。
depends:模块依赖项,在这个模块中没有需要依赖的其它模块,保留默认的base。
data:模块资源文件,视图、菜单、权限等都可以写在资源文件中。
demo:模块演示数据。
三、运行模块
1、模块安装与升级及相关信息
2、模块使用
3、数据库(自动创建表“模块名_模块名”)
一、MVC目录架构(使用pycharm开发工具)
二、源码
1、controller._init_.py
# -*- coding: utf-8 -*- from . import controllers #引入下面的模块文件
2、controller.controllers
# -*- coding: utf-8 -*- from odoo import http class Test(http.Controller): @http.route('/test/test/', auth='public') def index(self, **kw): return "Hello, world" @http.route('/test/test/objects/', auth='public') def list(self, **kw): return http.request.render('test.listing', { 'root': '/test/test', 'objects': http.request.env['test.test'].search([]), }) @http.route('/test/test/objects/<model("test.test"):obj>/', auth='public') def object(self, obj, **kw): return http.request.render('test.object', { 'object': obj })
3、models._init_.py
# -*- coding: utf-8 -*- from . import models
4、models.models.py
# -*- coding: utf-8 -*- from odoo import models, fields, api class test(models.Model): _name = 'test.test' #数据库表名 name = fields.Char() value = fields.Integer() value2 = fields.Float(compute="_value_pc", store=True) description = fields.Text() @api.depends('value') def _value_pc(self): self.value2 = float(self.value) / 100
这里我们定义了test对象模型,包含四个属性name ,value,value2,description。在模块安装完成后,odoo的ORM框架会自动把这个对象映射到数据库表。属性类型会映射到表字段数据类型,表名是
模块名_对象名
5、views.templates.xml
<odoo> <data> <template id="listing"> <ul> <li t-foreach="objects" t-as="object"> <a t-attf-href="#{ root }/objects/#{ object.id }"> <t t-esc="object.display_name"/> </a> </li> </ul> </template> <template id="object"> <h1><t t-esc="object.display_name"/></h1> <dl> <t t-foreach="object._fields" t-as="field"> <dt><t t-esc="field"/></dt> <dd><t t-esc="object[field]"/></dd> </t> </dl> </template> </data> </odoo>
6、views.views.xml
<odoo> <data> <!-- explicit list view definition --> <record model="ir.ui.view" id="test.list"> <field name="name">test list</field> <field name="model">test.test</field>将这个视图与我们之前定义的对象模型test.test进行绑定 <field name="arch" type="xml">这里表示这是一个tree视图,并定义列表项显示的列。在列表项中显示name,value,value2 三个字段的内容,这里字段都是在test.test对象模型中定义的 <tree> <field name="name"/> <field name="value"/> <field name="value2"/> </tree> </field> </record> <!-- actions opening views on models -->
这里定义视图动作,视图动作将菜单、视图、模型进行关联。 name 会在模块的导航条中显示 res_model 视图动作绑定的模型 view_mode 视图动作关联的视图类型 <record model="ir.actions.act_window" id="test.action_window"> <field name="name">test window</field> <field name="res_model">test.test</field>视图动作绑定的模型 <field name="view_mode">tree,form</field>视图动作关联的视图类型 </record> <!-- server action to the one above --> <record model="ir.actions.server" id="test.action_server"> <field name="name">test server</field> <field name="model_id" ref="model_test_test"/> <field name="code"> action = { "type": "ir.actions.act_window", "view_mode": "tree,form", "res_model": self._name, } </field> </record> <!-- Top menu item 第一级--> <menuitem name="test" id="test.menu_root"/> <!-- menu categories第二级 --> <menuitem name="Menu 1" id="test.menu_1" parent="test.menu_root"/> <menuitem name="Menu 2" id="test.menu_2" parent="test.menu_root"/> <menuitem name="Menu 3" id="test.menu_3" parent="test.menu_root"/> <menuitem name="Menu 4" id="test.menu_4" parent="test.menu_root"/> <!-- actions 第三级--> <menuitem name="List" id="test.menu_1_list" parent="test.menu_1" action="test.action_window"/> <menuitem name="List2" id="test.menu_1_list2" parent="test.menu_1" action="test.action_window"/> <menuitem name="Server to list" id="test" parent="test.menu_2" action="test.action_server"/> </data> </odoo>
7、test._init_.py
# -*- coding: utf-8 -*- from . import controllers from . import models
8、test._manifest_.py
# -*- coding: utf-8 -*- { 'name': "test", '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 'data': [ # 'security/ir.model.access.csv', 'views/views.xml', 'views/templates.xml', ], # only loaded in demonstration mode(示范模式) 'demo': [ 'demo/demo.xml', ], }
这是整个模块的配置文件,配置项从字面上很容易理解。
name:模块名,会显示在模块列表中。
summary:摘要,在模块详情显示。
description:描述,在模块详情显示。
depends:模块依赖项,在这个模块中没有需要依赖的其它模块,保留默认的base。
data:模块资源文件,视图、菜单、权限等都可以写在资源文件中。
demo:模块演示数据。
三、运行模块
1、模块安装与升级及相关信息
2、模块使用
3、数据库(自动创建表“模块名_模块名”)
相关文章推荐
- Struts2的学习笔记1配置运行环境运行第一个例子Hello word!
- 菜鸟学习Spring——第一个例子
- 创建第一个JBPM6项目并且运行自带的helloword例子(JBPM6学习之三)
- Struts2学习(一)【介绍与环境搭建和第一个例子】
- NGUI研究院之开始学习制作第一个例子(一)
- 运行 Unix网络编程 中的第一个例子 unp学习 实例的运行
- RN学习之我的第一个RN小例子
- Hibernate学习--Hibernate的第一个小例子
- Hibernate学习笔记--第一篇 初学入门第一个例子
- Drools学习笔记4-第一个例子
- tensorflow 学习第一个例子
- 《Python-第一个小程序》---购物车购物学习小例子
- GLSL着色语言学习。橙皮书第一个例子GLSL+OpenTK+F#的实现。
- highcharts学习之第一个例子
- java.io 第一个例子 TestFileInputStream
- NHibernate 3 Beginner's Guide学习笔记-第二章-第一个完整的例子
- 零基础学习qt4 第七章的第一个例子
- Ibatis学习01——环境搭建(第一个例子)
- NGUI研究院之开始学习制作第一个例子(一)
- KING_U3D学习之Unity Test Tools(一)_官方例子解析