第 6 章:基础视图(Basic Views)

上一章 中,我们已经看到 Odoo 能够为给定模型生成默认视图。然而,在实际应用中,默认视图对于业务应用程序来说 永远 是不可接受的。相反,我们应该至少以逻辑的方式组织各个字段。

视图(Views)是在 XML 文件中通过操作(actions)和菜单(menus)定义的。它们是 ir.ui.view 模型的实例。

在我们的房地产模块中,我们需要以逻辑的方式组织字段:

  • 在列表视图(list view)中,我们希望显示的不仅仅是名称。

  • 在表单视图(form view)中,字段应分组显示。

  • 在搜索视图(search view)中,我们必须能够搜索的不仅仅是名称。具体来说,我们需要一个针对“可用”属性的过滤器,以及按邮政编码分组的快捷方式。

列表

参考:与此主题相关的文档可以在 列表 中找到。

注解

目标:在本节结束时,列表视图应如下所示:

列表视图(List View)

列表视图(List Views),也称为表格视图,以表格形式显示记录。

它们的根元素是 <list> 。此视图的最基本版本只是列出表中要显示的所有字段(每个字段是一列):

<list string="Tests">
    <field name="name"/>
    <field name="last_seen"/>
</list>

一个简单的示例可以在这里找到:示例链接

Exercise

添加自定义列表视图。

在适当的 XML 文件中为 estate.property 模型定义一个列表视图。查看本节的 目标 以了解需要显示的字段。

提示:

  • 不要添加您在上面示例中看到的 editable="bottom" 属性。我们稍后会再讨论它。

  • 某些字段标签可能需要调整以匹配参考内容。

像往常一样,您需要重启服务器(别忘了使用 -u 选项)并刷新浏览器以查看结果。

警告

在本章中,您可能会使用一些复制粘贴操作,因此请务必确保每个视图的 id 唯一!

警告

请记住,按照 安全性简介 中的说明,为用户设置正确的访问权限!

如果用户只有读取权限,则不会显示 创建 按钮。

表单

参考:与此主题相关的文档可以在 表单 中找到。

注解

目标:在本节结束时,表单视图应如下所示:

表单视图(Form View)

表单用于创建和编辑单条记录。

它们的根元素是 <form> 。表单由高级结构元素(如组和笔记本)以及交互式元素(如按钮和字段)组成:

<form string="Test">
    <sheet>
        <group>
            <group>
                <field name="name"/>
            </group>
            <group>
                <field name="last_seen"/>
            </group>
        </group>
        <notebook>
            <page string="Description">
                <field name="description"/>
            </page>
        </notebook>
    </sheet>
</form>

可以使用常规的 HTML 标签(如 divh1 )以及 class 属性(Odoo 提供了一些内置类)来微调外观。

一个简单的示例可以在这里找到:示例链接

Exercise

添加自定义表单视图。

在适当的 XML 文件中为 estate.property 模型定义一个表单视图。查看本节的 目标 以了解页面的预期最终设计。

在达到预期结果之前,这可能需要一些试错 ;-) 建议您一次添加一个字段和标签,以帮助理解其工作原理。

为了避免每次修改视图时都重新启动服务器,在启动服务器时使用 --dev xml 参数会很方便:

$ ./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate --dev xml

此参数允许您仅通过刷新页面即可查看视图修改。

参考:与此主题相关的文档可以在 搜索域 中找到。

在 Odoo 中,域(domain)编码了记录的条件:域是一个条件列表,用于选择模型记录的子集。每个条件是一个三元组,包含 字段名称运算符。如果指定字段满足应用于值的运算符条件,则记录符合该条件。

例如,当应用于 产品(Product) 模型时,以下域选择所有单价大于 1000服务(services)::

[('product_type', '=', 'service'), ('unit_price', '>', 1000)]

默认情况下,条件通过隐式的 AND 组合,这意味着记录要匹配域,必须满足 每个 条件。逻辑运算符 & (AND)、| (OR)和 ! (NOT)可以用于显式组合条件。它们以前缀位置使用(运算符插入在其参数之前,而不是之间)。例如,选择“是服务 单价 不在 1000 到 2000 之间的产品”::

['|',
    ('product_type', '=', 'service'),
    '!', '&',
        ('unit_price', '>=', 1000),
        ('unit_price', '<', 2000)]

注解

XML does not allow < and & to be used inside XML elements. To avoid parsing errors, entity references should be used: &lt; for < and &amp; for &. Other entity references (&gt;, &apos; & &quot;) are optional.

Example

<filter name="negative" domain="[('test_val', '&lt;', 0)]"/>

Exercise

添加过滤器和分组功能。

以下内容应添加到之前创建的搜索视图中:

  • 一个显示可用属性的过滤器,即状态应为“新建”或“已收到报价”。

  • 按邮政编码对结果进行分组的功能。

看起来不错?此时,我们已经能够创建模型并设计出业务上有意义的用户界面。然而,一个关键组件仍然缺失:模型之间的 链接