第6章:基本观点

我们在 previous chapter 中看到 Odoo 能够为给定模型生成默认视图。实际上,业务应用程序**永远**不接受默认视图。相反,我们至少应该以逻辑的方式组织各个领域。

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

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

  • 在列表视图中,我们想要显示的不仅仅是名称。

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

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

列表

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

注解

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

列表视图

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

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

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

可以找到一个简单的示例 here

Exercise

添加自定义列表视图。

在相应的 XML 文件中定义“estate.property”模型的列表视图。检查此部分的 目标 以获取要显示的字段。

尖端:

  • 不要添加上例中的“editable="bottom"”属性。我们稍后再讨论这个问题。

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

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

警告

在本章中您可能会使用一些复制粘贴,因此请始终确保“id”对于每个视图保持唯一!

警告

请记住按照 security intro 中的说明为用户设置正确的访问权限!

如果用户仅有读取权限,则不会显示 Create 按钮。

形式

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

注解

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

表单视图

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

它们的根元素是“<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 标签,例如 div and h1 as well as the the class 属性(Odoo 提供了一些内置类)来微调外观。

可以找到一个简单的示例 here

Exercise

添加自定义表单视图。

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

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

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

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

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

域名

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

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

例如,当用于 Product 模型时,以下域选择单价大于 1000 的所有 services:

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

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

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

注解

XML 不允许 < 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;) 是可选的。

Example

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

Exercise

添加过滤器和分组依据。

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

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

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

看起来不错吗?此时,我们已经能够创建模型并设计对业务有意义的用户界面。然而,仍然缺少一个关键组件:link between models