第七章:基本视图

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

视图在 XML 文件中定义,包含操作和菜单。它们是 ir.ui.view 模型的实例。

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

  • 在列表(树形)视图中,我们希望显示更多内容,而不仅仅是名称。

  • 在表单视图中,字段应该被分组。

  • 在搜索视图中,我们必须能够搜索更多的内容,而不仅仅是名称。具体来说,我们想要一个“可用”属性的过滤器和一个按邮政编码分组的快捷方式。

列表

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

注解

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

列表视图

列表视图,也称为树形视图,以表格形式显示记录。

它们的根元素是 <tree>。这个视图的最基本版本只是简单地列出了要在表格中显示的所有字段(每个字段都是一个列):

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

一个简单的例子可以在 这里 找到。

Exercise

添加自定义列表视图。

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

小费:

  • 不要添加 editable="bottom" 属性,你可以在上面的例子中找到。我们稍后会回到它。

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

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

警告

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

表单

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

注解

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

表单视图

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

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

<form string="Test">
    <sheet>
        <group>
            <group>
                <field name="name"/>
            </group>
            <group>
                <field name="last_seen"/>
            </group>
            <notebook>
                <page string="Description">
                    <field name="description"/>
                </page>
            </notebook>
        </group>
    </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中,域编码记录的条件:域是模型记录的子集选择的条件列表。每个条件是一个三元组,包括 字段名操作符 。如果指定的字段满足操作符应用于值的条件,则记录满足条件。

例如,当应用于 Product 模型时,以下领域选择所有单位价格大于 1000services

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

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

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

注解

XML 不允许在 XML 元素内使用 <&。为了避免解析错误,应使用实体引用:&lt; 表示 <&amp; 表示 &。其他实体引用(&gt;&apos;&quot;)是可选的。

Example

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

Exercise

添加筛选和分组。

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

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

  • 按邮政编码分组结果的能力。

看起来不错吧?到这一步,我们已经能够创建模型并设计一个在业务上有意义的用户界面。然而,还缺少一个关键组件: 模型之间的链接