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

 

 

 

 

 

 

 

 

 

 

 

 

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