odoo之学习第一个例子test(1)

时间:2023-01-27 13:46:19

(环境搭建已经完成)

一、MVC目录架构(使用pycharm开发工具)

odoo之学习第一个例子test(1)

二、源码

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、模块安装与升级及相关信息

odoo之学习第一个例子test(1)odoo之学习第一个例子test(1)

2、模块使用

odoo之学习第一个例子test(1)odoo之学习第一个例子test(1)

3、数据库(自动创建表“模块名_模块名”)

odoo之学习第一个例子test(1)odoo之学习第一个例子test(1)