【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、数据库(自动创建表“模块名_模块名”)

 

 

 

 

 

 

 

 

 

 

 

 

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