基础视图

视图定义了模型记录的显示方式。每种视图类型都代表一种可视化模式(记录列表、聚合图等)。可以通过视图类型来通用的请求视图(例如:合作伙伴列表),也可以通过其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>

        <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>

        <!-- 窗口动作 -->
        <!-- 以下标记是“窗口动作”的定义 -->

“Notebooks”练习
在课程表视图中,将描述字段放在选项卡下,这样以后可以轻松添加包含其他信息的选项卡。
修改课程表单视图,如下所示:

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>

        <!-- 窗口操作 -->
        <!-- 以下标记是“窗口动作”的定义 -->