第 5 章:最后,一些可以使用的 UI¶
现在我们已经创建了新的 model 及其相应的 access rights,是时候与用户界面进行交互了。
在本章末尾,我们将创建几个菜单来访问默认列表和表单视图。
数据文件 (XML)¶
参考:与此主题相关的文档可以在 数据文件 中找到。
在 第 4 章:安全性 - 简介 中,我们通过 CSV 文件添加数据。当要加载的数据格式简单时,CSV 格式很方便。当格式更复杂时(例如加载视图或电子邮件模板的结构),我们使用 XML 格式。例如,这个 help field 包含 HTML 标签。虽然可以通过 CSV 文件加载此类数据,但使用 XML 文件更方便。
XML 文件必须添加到与 CSV 文件相同的文件夹中,并在 __manifest__.py. The content of the data files is also sequentially loaded when a module is installed or updated, therefore all remarks made for CSV files hold true for XML files. When the data is linked to views, we add them to the views 文件夹中进行类似定义。
在本章中,我们将通过 XML 文件加载第一个操作和菜单。操作和菜单是数据库中的标准记录。
注解
当性能很重要时,CSV 格式优于 XML 格式。在 Odoo 中就是这种情况,加载 CSV 文件比加载 XML 文件更快。
在 Odoo 中,用户界面(操作、菜单和视图)主要是通过创建和编写 XML 文件中定义的记录来定义的。常见的模式是“菜单”>“操作”>“视图”。要访问记录,用户需要浏览多个菜单级别;最深的级别是触发打开记录列表的操作。
行动¶
参考:与此主题相关的文档可以在 行动 中找到。
注解
目标:在本节结束时,应在系统中加载一个操作。我们在 UI 中还看不到任何内容,但文件应该已加载到日志中:
INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml
可以通过三种方式触发操作:
通过单击菜单项(链接到特定操作)
通过单击视图中的按钮(如果这些按钮连接到操作)
作为对象上的上下文操作
本章我们只介绍第一种情况。第二种情况将在 later chapter 中介绍,而最后一种情况是高级主题的焦点。在我们的房地产示例中,我们希望将菜单链接到“estate.property”模型,以便我们能够创建新记录。该操作可以被视为菜单和模型之间的链接。
我们 test_model 的基本行动是:
<record id="test_model_action" model="ir.actions.act_window">
<field name="name">Test action</field>
<field name="res_model">test_model</field>
<field name="view_mode">list,form</field>
</record>
id是一个 external identifier。它可用于引用记录(无需知道其数据库内标识符)。modelhas a fixed value ofir.actions.act_window(窗口操作 (ir.actions.act_window))。name是操作的名称。res_model是该操作适用的模型。view_mode是将可用的视图;在本例中,它们是列表视图和表单视图。我们将看到 later 还可以有其他视图模式。
Odoo 中的示例随处可见,但 this 是简单操作的一个很好的示例。请注意 XML 数据文件的结构,因为您将在以下练习中需要它。
Exercise
添加一个动作。
创建“estate_property_views.xml` file in the appropriate folder and define it in the ``__manifest__.py`”文件。
为模型“estate.property”创建一个操作。
重新启动服务器,您应该会在日志中看到加载的文件。
字段、属性和视图¶
注解
目标:在本节末尾,售价应为只读,卧室数量和可用日期应具有默认值。此外,复制记录时,不会复制售价和供货日期值。
保留字段``active`` and state are added to the ``estate.property``模型。
到目前为止,我们只使用了房地产广告的通用视图,但在大多数情况下,我们希望对视图进行微调。 Odoo 中有许多可能的微调,但通常第一步是确保:
某些字段有默认值
某些字段是只读的
复制记录时某些字段没有被复制
在我们的房地产业务案例中,我们希望:
售价应该是只读的(稍后会自动填写)
复制记录时不应复制可用日期和售价
默认卧室数量应为 2
默认可用日期应为 3 个月内
一些新属性¶
在进一步进行视图设计之前,让我们回到模型定义。我们看到一些属性,例如“required=True”,会影响数据库中的表模式。其他属性将影响视图或提供默认值。
Exercise
向字段添加新属性。
找到适当的属性(请参阅:class:~odoo.fields.Field)以:
将售价设置为只读
防止复制可用日期和售价值
重新启动服务器并刷新浏览器。您不应该能够设置任何售价。复制记录时,可用日期应为空。
默认值¶
任何字段都可以指定默认值。在字段定义中,添加选项 default=X where X 可以是 Python 文字值(布尔值、整数、浮点数、字符串),也可以是采用模型并返回值的函数:
name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now)
name field will have the value ‘Unknown’ by default while the last_seen 字段将设置为当前时间。
Exercise
设置默认值。
添加适当的默认属性,以便:
默认卧室数量为 2
默认可用日期为 3 个月后
提示:这可能对您有帮助:today()
检查默认值是否按预期设置。
保留字段¶
参考:与此主题相关的文档可以在 保留字段名称 中找到。
一些字段名称是为预定义行为保留的。当需要相关行为时,应该在模型上定义它们。
重新启动服务器,创建一个新属性,然后返回到列表视图…该属性将不会列出! active is an example of a reserved field with a specific behavior: when a record has active=False,它会自动从任何搜索中删除。要显示创建的属性,您需要专门搜索非活动记录。
Exercise
设置活动字段的默认值。
为``active``字段设置适当的默认值,这样它就不会再消失。
请注意,默认的“active=False”值已分配给所有现有记录。
Exercise
添加状态字段。
添加“state` field to the ``estate.property`”模型。可能有五个值:New、Offer Received、Offer Accepted、Sold 和 Cancelled。它必须是必需的,不应被复制,并且应将其默认值设置为“新建”。
确保使用正确的类型!
state 稍后将用于多项 UI 增强。
现在,由于默认视图,我们能够与 UI 进行交互,下一步很明显:我们要定义 our own views。
- 1
由于性能原因,Web 客户端保留了各种菜单和视图的缓存,因此需要刷新。