(環境搭建已經完成)
一、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、數據庫(自動創建表“模塊名_模塊名”)