(環境搭建已經完成)
一、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 models4、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 -->
這裏定義視圖動作,視圖動作將菜單、視圖、模型進行關聯。7、test._init_.py
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>
# -*- coding: utf-8 -*- from . import controllers from . import models8、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、數據庫(自動創建表“模塊名_模塊名”)