跳至内容

老赵解读Odoo 18开发教程06:基础视图

2026年8月15日
老赵解读Odoo 18开发教程06:基础视图

原文:Odoo 18 官方开发教程“Server framework 101”第 6 章。本文尽量保留原文结构、代码、练习与图片,仅进行中文翻译,并在文末增加“老赵解读”。

第6章:基本观点


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

视图在带有操作和菜单的 XML 文件中定义。他们是
ir.ui.view模型。

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

  • 在列表视图中,我们想要显示的不仅仅是名称。
  • 在表单视图中,应将字段分组。
  • 在搜索视图中,我们必须能够搜索的不仅仅是名称。具体来说,我们想要一个
    过滤“可用”房产和按邮政编码分组的快捷方式。

列表

参考:与该主题相关的文档可以在以下位置找到
列表

说明

目标:在本节末尾,列表视图应如下所示:

List view

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

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

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

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

练习

添加自定义列表视图。

在相应的 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 提供了一些内置类)来微调外观。

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

练习

添加自定义表单视图。

在相应的 XML 文件中为 estate.property模型定义表单视图。检查
目标 本节的内容用于预期的页面最终设计。

在获得预期结果之前,这可能需要一些尝试和错误;-) 建议
您一次添加一个字段和标签以帮助理解它是如何工作的。

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

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

该参数允许您只需刷新页面即可查看您的视图修改。

搜索

参考:与该主题相关的文档可以在以下位置找到
搜索

说明

目标:在本节末尾,搜索视图应如下所示:

Search fields
Filter
Group By

搜索视图与列表和表单视图略有不同,因为它们不显示
内容。虽然它们适用于特定的模型,但它们用于过滤
其他视图的内容(通常是聚合视图,例如
列表)。除了用例的差异之外,它们是
以同样的方式定义。

它们的根元素是 <search>。这个视图最基本的版本很简单
列出所有需要快捷方式的字段:

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

Odoo 生成的默认搜索视图提供了按 name 进行过滤的快捷方式。这是非常
常见的做法是添加用户可能在自定义搜索视图中进行过滤的字段。

练习

添加自定义搜索视图。

在相应的 XML 文件中定义 estate.property模型的搜索视图。检查
本节的第一张图片 目标 查看字段的列表。

重新启动服务器后,应该可以过滤给定的字段。

搜索视图还可以包含 <filter> 元素,用作切换
预定义的搜索。过滤器必须具有以下属性之一:

  • domain:将给定的域添加到当前搜索中
  • context:向当前搜索添加一些上下文;使用密钥 group_by 进行分组
    给定字段名称的结果

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

在进一步练习之前,有必要介绍一下“域”的概念。

参考:与该主题相关的文档可以在以下位置找到
搜索域

在 Odoo 中,域对以下条件进行编码
记录:域是用于选择模型的子集的标准列表
记录。每个标准都是一个三元组,其中 字段名称, 一个 操作员 和一个
如果指定的字段满足应用于该值的运算符的条件,则记录满足标准。

例如,当用于 产品展示 模型以下域选择
全部 服务 单价大于 1000:

[('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;) 是可选的。

示例

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

练习

添加过滤器和分组依据。

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

  • 显示可用房产的过滤器,即状态应为“New”或
    “报价已收到”。
  • 按邮政编码对结果进行分组的能力。

看起来不错吗?此时我们已经能够创建模型并设计一个用户界面
从商业角度来说是有道理的。然而,仍然缺少一个关键组件:
模型之间的链接

老赵解读

列表、表单和搜索视图分别解决批量浏览、单据处理和数据定位问题。它们不是三张孤立页面,而是同一业务对象的三个使用视角。

视图设计应优先服务高频任务:列表保留最有辨识度的字段,表单按业务阶段分组,搜索视图提供真正有管理价值的筛选和分组。字段越多并不代表信息越完整,反而可能增加操作成本。

老赵解读Odoo 18开发教程05:第一个用户界面