Odoo15官方文档 开发 核心教程 第6章:一些可以使用的UI

现在我们已经创建了新模型及其相应的访问权限,是时候与用户界面交互了。

在本章末尾,我们将创建两个菜单,以访问默认列表和表单视图。

数据文件(XML)

参考:与本主题相关的文档可以在数据文件中找到。

在第5章:安全简介中,我们通过CSV文件添加了数据。当要加载的数据具有简单格式时,CSV格式很方便。当格式更复杂时(例如加载视图或电子邮件模板的结构),我们会使用XML格式。例如,此帮助字段包含HTML标记。虽然可以通过CSV文件加载此类数据,但使用XML文件更方便。

XML文件必须添加到与CSV文件相同的文件夹中,并在__manifest__.py中进行类似的定义。当安装或更新模块时,数据文件的内容也会按顺序加载,因此,对CSV文件的所有注释对XML文件都适用。当数据链接到视图时,我们将其添加到views文件夹。

在本章中,我们将通过XML文件加载第一个动作和菜单。动作和菜单是数据库中的标准记录。

备注
当性能很重要时,CSV格式优于XML格式。在Odoo中,加载CSV文件比加载XML文件更快。

在Odoo中,用户界面(动作、菜单和视图)在很大程度上通过创建和编写XML文件中定义的记录来定义。常见的模式是菜单 > 动作 > 视图。为了访问记录,用户通过几个菜单级别进行导航;最深层是触发打开记录列表的动作。

动作

参考:与本主题相关的文档可以在Actions中找到。

备注
目标:在本节结束时,应在系统中加载动作。我们在UI中还没有看到任何内容,但文件应该加载到日志中:

INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml

可以通过三种方式触发动作:

  1. 通过单击菜单项(链接到特定动作)
  2. 通过单击视图中的按钮(如果这些按钮链接到动作)
  3. 作为对象上的上下文动作

在本章中,我们只讨论第一种案例。第二个案例将在后面的章节中介绍,而最后一个案例是一个高级主题的重点。在我们的estate示例中,我们希望将菜单链接到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。(窗口动作(ir.actions.act_window))。
  • name:动作的名称
  • res_model:动作适用的模型。
  • view_mode:将提供的视图;在这种情况下,它们是列表(树)和表单视图。我们稍后会看到,还有其他视图模式。

该示例可以在Odoo很多地方找到,但这是一个简单动作的一个很好的例子。请注意XML数据文件的结构,因为您将在以下练习中需要它。

练习
添加一个动作。
在适当的目录创建estate_property_views.xml文件,并在__manifest __.py文件中定义它。
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模型。如前所述,动作可以被视为菜单和模型之间的链接。

然而,菜单始终遵循一种架构,实际上有三个级别的菜单:

  1. 根菜单,显示在应用程序切换器中(Odoo Community App switcher是一个下拉菜单)
  2. 第一级菜单,显示在顶部栏中
  3. 动作菜单
    在这里插入图片描述
    在这里插入图片描述

定义结构的最简单方法是在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的值。

练习
添加菜单。
目标:在本节结束时,Selling Price应为只读,Bedrooms和Available Form应具有默认值。此外,复制记录时不会复制Selling Price和Available Form值。
在这里插入图片描述
保留的字段active和state已添加到estate.property模型中。

到目前为止,我们只在房地产广告中使用了通用视图,但在大多数情况下,我们希望对视图进行微调。Odoo有很多微调,但通常第一步是确保:

  • 某些字段具有默认值
  • 某些字段是只读的
  • 复制记录时未复制某些字段

在我们的房地产业务案例中,我们希望:

  • Selling Price应为只读(稍后将自动填写)
  • 复制记录时,不应复制Available Form和Selling Price
  • 默认Bedrooms数应为2
  • 默认Available Form应为3个月后

一些新属性

在进一步讨论视图设计之前,让我们回到我们的模型定义。我们看到一些属性,例如required=True,会影响数据库中的表模式。其他属性将影响视图或提供默认值。

练习
向字段添加新属性。
找到适当的属性(请参见字段)以:

  • 将Selling Price设置为只读
  • 防止复制Available Form和Selling Price

重新启动服务器并刷新浏览器。你不能设定任何Selling Price。复制记录时,Available Form应为空。

默认值

任何字段都可以给定默认值。在字段定义中,添加选项default=X,其中X是Python文字值(布尔、整数、浮点、字符串)或采用模型并返回值的函数:

name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=lambda self: fields.Datetime.now())

默认情况下,name字段的值为"Unknown",last_seen字段将设置为当前时间。

练习
设置默认值。
添加适当的默认属性,以便:

  • Bedrooms的默认数量为2间
  • 默认Available Form应为3个月后
    提示:这可能会帮助您:today()

检查默认值是否按预期设置。

保留字段

参考:与本主题相关的文档可以在保留字段名中找到。

为预定义的行为保留了几个字段名。当需要相关行为时,应在模型上定义它们。

练习
添加活动字段。
active字段添加到estate.property模型中。

重新启动服务器,创建新属性,然后返回列表视图…该属性将不会列出!active是具有特定行为的保留字段的示例:当记录的active=False时,它会自动从任何搜索中删除。要显示创建的属性,您需要专门搜索非活动记录。

在这里插入图片描述

练习
设置活动字段的默认值。
active字段设置适当的默认值,以免消失。

请注意,默认的active=False值已分配给所有现有记录。

练习
添加状态字段。
stats字段添加到estate.property模型中。添加五个可能的值:New, Offer Received, Offer Accepted, Sold 和 Canceled。它们是必须的,不应复制,并且应将其默认值设置为New。
确保使用正确的类型!

stats稍后将用于几个UI增强。

基于默认视图,现在我们可以与UI交互,下一步很明显:我们想要定义自己的视图

提示:由于性能原因,web客户端保留了各种菜单和视图的缓存,因此需要刷新。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值