### 基本视图
[TOC]
视图定义了模型数据的呈现方式。不同的视图类型决定了数据的可视化方式(记录行列表、图形化聚合)。视图可以通过类型(比如*partners*列表)或id被请求。对于一般请求,将被对应类型的最低优先级视图响应(每个类型的最低优先级视图是该类型的默认视图)。视图继承允许更改在其他地方声明的视图(添加或删除内容)。
#### 通用视图声明
视图通过一个`ir.ui.view`的模型记录来声明。视图类型由`arch`字段的根元素隐含定义:
~~~
<record model="ir.ui.view" id="view_id">
<field name="name">view.name</field>
<field name="model">object_name</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<!-- view content: <form>, <tree>, <graph>, ... -->
</field>
</record>
~~~
> 危险
> 因为视图的内容是XML,所以`arch`字段必须被声明为`type="xml"`以正确解析。
#### 树视图
树视图也被称为列表视图,以表格形式显示记录。根元素是`<tree>`.最简单的树视图是在表格中列出所有字段(每列对应一个字段):
~~~
<tree string="Idea list">
<field name="name"/>
<field name="inventor_id"/>
</tree>
~~~
#### 表单视图
表单视图通常用来建立和编辑单条记录。根元素是`<form>`,由结构元素(groups,notebooks)和交互元素(button,fields)组成。
~~~
<form string="Idea form">
<group colspan="4">
<group colspan="2" col="2">
<separator string="General stuff" colspan="2"/>
<field name="name"/>
<field name="inventor_id"/>
</group>
<group colspan="2" col="2">
<separator string="Dates" colspan="2"/>
<field name="active"/>
<field name="invent_date" readonly="1"/>
</group>
<notebook colspan="4">
<page string="Description">
<field name="description" nolabel="1"/>
</page>
</notebook>
<field name="state"/>
</group>
</form>
~~~
> 练习使用XML定制窗体视图
> 建立课程对象的表单视图,显示课程的名称和描述字段。
`openacademy/views/openacademy.xml`
~~~
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="course_form_view">
<field name="name">course.form</field>
<field name="model">openacademy.course</field>
<field name="arch" type="xml">
<form string="Course Form">
<sheet>
<group>
<field name="name"/>
<field name="description"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- window action -->
<!--
The following tag is an action definition for a "window action",
~~~
> 练习notebook结构元素
> 在课程的表单视图中,将描述字段放在一个选项卡中,然后再添加选项卡放置其它字段。修改后的课程表单视图如下:
`openacademy/views/openacademy.xml`
~~~
<sheet>
<group>
<field name="name"/>
</group>
<notebook>
<page string="Description">
<field name="description"/>
</page>
<page string="About">
This is an example of notebooks
</page>
</notebook>
</sheet>
</form>
</field>
~~~
表单视图也可以使用纯HTML来进行更灵活的布局
~~~
<form string="Idea Form">
<header>
<button string="Confirm" type="object" name="action_confirm"
states="draft" class="oe_highlight" />
<button string="Mark as done" type="object" name="action_done"
states="confirmed" class="oe_highlight"/>
<button string="Reset to draft" type="object" name="action_draft"
states="confirmed,done" />
<field name="state" widget="statusbar"/>
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only" string="Idea Name" />
<h1><field name="name" /></h1>
</div>
<separator string="General" colspan="2" />
<group colspan="2" col="2">
<field name="description" placeholder="Idea description..." />
</group>
</sheet>
</form>
~~~
#### 搜索视图
搜索视图可对列表视图(或者其它聚合视图)中的字段进行搜索。搜索视图的根元素是`<search>`,内容包含所有可以搜索的字段。
~~~
<search>
<field name="name"/>
<field name="inventor_id"/>
</search>
~~~
如果在模型中没有定义搜索视图,Odoo会生成一个只包含`name`字段的搜索视图。
> 练习搜索课程,通过标题和描述来搜索课程。
`openacademy/views/openacademy.xml`
~~~
</field>
</record>
<record model="ir.ui.view" id="course_search_view">
<field name="name">course.search</field>
<field name="model">openacademy.course</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="description"/>
</search>
</field>
</record>
<!-- window action -->
<!--
The following tag is an action definition for a "window action",
~~~
作者:luohuayong
链接:http://www.jianshu.com/p/cc63c684447a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 开发教程
- Odoo10开发教程一(构建模块)
- Odoo10开发教程二(基本视图)
- Odoo10开发教程三(模型关联)
- Odoo10开发教程四(继承)
- Odoo10开发教程五(计算字段和默认值)
- Odoo10开发教程六(高级视图)
- Odoo10开发教程七(工作流和安全)
- 参考手册
- odoo V10中文参考手册(一:ORM API)
- odoo V10中文参考手册(指导规范)
- 技巧
- odoo 常用widget
- Odoo(OpenERP)开发实践:菜单隐藏(1)
- Odoo(OpenERP)开发实践:菜单隐藏(2)
- Odoo(OpenERP)开发实践:数据模型学习
- Odoo中自动备份数据库
- Odoo(OpenERP)应用实践: 使用db-filter参数实现通过域名指定访问哪个数据库
- Odoo(OpenERP)配置文件openerp-server.conf详解
- Odoo(OpenERP v8)数据模型(Data Model)
- odoo10学习笔记十七:controller
- Qweb定义