现在我们已经创建了新模型及其 相应的,是时候了 与用户界面交互。
在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。
数据文件 (XML)
参考:与此主题相关的文档可以在数据文件中找到。
在第五章:安全性-简介中,我们通过 CSV 文件添加了数据。CSV 当要加载的数据具有简单的格式时,format 很方便。当格式更复杂时 (例如,加载视图或电子邮件模板的结构),我们使用 XML 格式。例如 此帮助字段包含 HTML 标记。虽然可以通过 CSV 文件加载此类数据,但它更多 方便使用XML文件。
XML文件必须添加到与CSV文件相同的文件夹中,并在__manifest .py中进行类似的定义。在安装或更新模块时,数据文件的内容也会按顺序加载,因此针对CSV文件的所有备注对XML文件都适用。当数据链接到视图时,我们将它们添加到views文件夹中。
在本章中,我们将通过XML文件加载我们的第一个动作和菜单。操作和菜单是 数据库中的标准记录。
注意
当性能很重要时,CSV 格式优先于 XML 格式。Odoo就是这种情况 其中加载 CSV 文件比加载 XML 文件快。
在Odoo中,用户界面(操作,菜单和视图)主要通过创建来定义 以及编写 XML 文件中定义的记录。常见的模式是“菜单”>“操作”>“视图”。 要访问记录,用户需要通过多个菜单级别导航;最深的层次是 触发记录列表打开的操作。
行动
参考:与此主题相关的文档可在操作中找到。
注意
目标:在本节结束时,应在系统中加载一个操作。我们不会看到 UI中的任何内容,但文件应加载到日志中:
INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml
可以通过三种方式触发操作:
-
通过单击菜单项(链接到特定操作)
-
通过单击视图中的按钮(如果这些按钮连接到操作)
-
作为对对象的上下文操作
在本章中,我们将只介绍第一种情况。第二种情况将在后面的章节中介绍,而最后一种情况是 高级主题。在我们的房地产示例中,我们希望将菜单链接到模型,以便我们能够创建新记录。该操作可以被视为菜单之间的链接 和模型。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">tree,form</field>
</record>
-
id
是外部标识符。它可用于引用记录 (不知道其数据库内标识符)。 -
model
具有固定值ir.actions.act_window
(Window Actions (ir.actions.act_window))。 -
name
是操作的名称。 -
res_model
是应用该操作的模型。 -
view_mode
是将可用的视图;在本例中,它们是列表(树)和表单视图。 我们稍后会看到,可以有其他视图模式。
在Odoo中随处可见的例子,但这是简单操作的一个很好的例子。请注意 XML 数据文件的结构,因为您将 在以下练习中需要它。
锻炼
添加操作。
Create the estate_property_views.xml file in the appropriate folder and define it in the __manifest__.py file.
Create an action for the model estate.property.
菜单
参考:可以在快捷方式中找到与此主题相关的文档。
注意
目标:在本节结束时,应创建三个菜单,默认视图为 显示:
为了降低声明菜单(ir.ui.menu)并将其连接到相应操作的复杂性,我们可以使用<menuitem>快捷方式。
test_model_action的基本菜单是:
<menuitem id="test_model_menu_action" action="test_model_action"/>
菜单test_model_menu_action链接到动作test_model_action,而动作链接到模型test_model。如前所述,操作可以看作是菜单和模型之间的链接。
但是,菜单始终遵循体系结构,在实践中有三个级别的菜单:
-
根菜单,显示在应用程序切换器中(Odoo社区应用程序切换器是一个 下拉菜单)
-
第一级菜单,显示在顶部栏中
-
操作菜单
定义结构的最简单方法是在XML文件中创建它。test_model_action的基本结构是:
<menuitem id="test_menu_root" name="Test">
<menuitem id="test_first_level_menu" name="First Level">
<menuitem id="test_model_menu_action" action="test_model_action"/>
</menuitem>
</menuitem>
第三个菜单的名称取自 action。
锻炼
添加菜单。
Create the estate_menus.xml file in the appropriate folder and define it in the __manifest__.py file. Remember the sequential loading of the data files ;-)
Create the three levels of menus for the estate.property action created in the previous exercise. Refer to the Goal of this section for the expected result.
重新启动服务器并刷新浏览器1.您现在应该看到菜单, 您甚至可以创建您的第一个房地产广告!
字段、属性和视图
注意
目标:在本节末尾,销售价格应为只读,数字 的卧室数和可用日期应具有默认值。此外,售价 并且不会在重复记录时复制可用日期值。
保留字段active和state被添加到estate.property模型。
到目前为止,我们只在房地产广告中使用了通用视图,但是 在大多数情况下,我们希望对视图进行微调。Odoo 中有许多微调,但是 通常,第一步是确保:
-
某些字段具有默认值
-
某些字段是只读的
-
复制记录时,某些字段不会复制
在我们的房地产商业案例中,我们希望以下几点:
-
售价应为只读(稍后会自动填写)
-
复制记录时,不应复制可用日期和销售价格
-
默认卧室数应为 2
-
默认可用日期应为 3 个月后
一些新属性
在进一步进行视图设计之前,让我们先回到模型定义。我们看到一些属性,比如required=True,会影响数据库中的表模式。其他属性将影响视图或提供默认值。
锻炼
向字段添加新属性。
找到适当的属性更改为:
-
将销售价格设置为只读
-
防止复制可用日期和销售价格值
重新启动服务器并刷新浏览器。您不应能够设置任何销售价格。什么时候 复制记录时,可用日期应为空。
默认值
任何字段都可以被赋予默认值。在字段定义中,添加default=X选项,其中X要么是Python文字值(boolean, integer, float, string),要么是接受模型并返回值的函数:
name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now)
name字段默认值为“Unknown”,而last_seen字段将被设置为当前时间。
锻炼
设置默认值。
添加适当的默认属性:
-
the default number of bedrooms is 2
-
the default availability date is in 3 months
检查默认值是否按预期设置。
保留字段
参考:与本主题相关的文档可在保留字段名称中找到。
为预定义的行为保留了一些字段名称。它们应该在 在需要相关行为时进行建模。
锻炼
Add active field.
Add the active
field to the estate.property
model.
重新启动服务器,创建一个新属性,然后返回到列表视图…该属性将不会被列出!active是具有特定行为的保留字段的一个示例:当一条记录具有active=False时,它将自动从任何搜索中删除。要显示创建的属性,您需要专门搜索非活动记录。
锻炼
为active字段设置默认值。
为活动字段设置适当的默认值,使其不再消失。
注意,默认的active=False值被分配给所有现有的记录。
锻炼
添加state 字段。
Add a state field to the estate.property model. Five values are possible: New, Offer Received, Offer Accepted, Sold and Canceled. It must be required, should not be copied and should have its default value set to ‘New’.
Make sure to use the correct type!
state
稍后将用于多个 UI 增强功能。
现在,由于默认视图,我们能够与 UI 进行交互,下一步是 显而易见:我们想要定义自己的观点。
1文章来源:https://www.toymoban.com/news/detail-856042.html
由于 Web 客户端保留了各种菜单的缓存,因此需要刷新 和出于性能原因的视图。文章来源地址https://www.toymoban.com/news/detail-856042.html
到了这里,关于Odoo17入门教程第六章 UI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!