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













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