odoo之學習第一個例子test(1)

(環境搭建已經完成)

一、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、數據庫(自動創建表“模塊名_模塊名”)













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章