odoo17开发教程(6):用户界面UI的交互-创建Action

前面的文章中我们已经创建了新模型及其相应的访问权限,是时候与用户界面进行交互了。

数据文件(XML)

上一篇文章中,我们通过 CSV 文件添加数据。当要加载的数据格式简单时,CSV 格式很方便。当格式比较复杂时(如加载视图结构或电子邮件模板),我们使用 XML 格式。

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

所以我们现在整个模块的结构是这样的:

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

在 Odoo 中,用户界面(动作、菜单和视图)主要是通过创建和组合 XML 文件中定义的记录来定义的。常见的模式是菜单 > 动作 > 视图。要访问记录,用户需要浏览多个菜单层级;最深的层级是触发打开记录列表的动作。

动作(action)

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

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

本章只介绍第一种情况。第二种情况将在以后的章节中介绍,而最后一种情况则是高级主题的重点。在 "房地产 "示例中,我们希望将菜单链接到 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 数据文件的结构,因为在下面的实践中会用到它。

<record id="crm_lost_reason_action" model="ir.actions.act_window">
        <field name="name">Lost Reasons</field>
        <field name="res_model">crm.lost.reason</field>
        <field name="view_mode">tree,form</field>
        <field name="help" type="html">
          <p class="o_view_nocontent_smiling_face">
            Define a new lost reason
          </p><p>
            Use lost reasons to explain why an opportunity is lost.
          </p><p>
            Some examples of lost reasons: "We don't have people/skill", "Price too high"
          </p>
        </field>
    </record>

实践

为我们的esteta模块创建以下文件views/estate_property_views.xml

<?xml version="1.0"?>
<odoo>
    <record id="estate_property_action" model="ir.actions.act_window">
        <field name="name">estate action</field>
        <field name="res_model">estate_property</field>
        <field name="view_mode">tree, form</field>
    </record>
</odoo>

并在manifest文件中定义它:

{
    'name': 'Real Estate',
    'version': '1.0',
    'description': 'Real Estate',
    'author': 'codejourney',
    'data': [
        'security/ir.model.access.csv',
        'views/estate_property_views.xml',
    ]
}

重启你的容器,你应该能在logs里面看见以下内容:

INFO odoo odoo.modules.loading: loading estate/views/estate_property_views.xml 

很棒,学到这里了,继续加油!


"To know that we know what we know, and to know that we do not know what we do not know, that is true knowledge." - Nicolaus Copernicus

相关推荐
一 乐30 分钟前
考研论坛平台|考研论坛小程序系统|基于java和微信小程序的考研论坛平台小程序设计与实现(源码+数据库+文档)
java·数据库·学习·考研·微信·小程序·源码
一 乐31 分钟前
租拼车平台|小区租拼车管理|基于java的小区租拼车管理信息系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·微信·notepad++·拼车
感谢地心引力37 分钟前
【Qt】Qt安装(2024-10,QT6.7.3,Windows,Qt Creator 、Visual Studio、Pycharm 示例)
c++·windows·python·qt·visual studio
BillDev43 分钟前
Oracle创建用户报错-ORA-65096: invalid common user or role name
数据库·oracle
或许,这就是梦想吧!1 小时前
## jupyter_server
ide·python·jupyter
szial1 小时前
深入理解SQL模糊查询中的特殊字符处理——以DB2为例
数据库·sql
jxxchallenger1 小时前
踩坑spring cloud gateway /actuator/gateway/refresh不生效
java·数据库·gateway
Bruce_Liuxiaowei1 小时前
Python小示例——质地不均匀的硬币概率统计
开发语言·python·概率统计
肥or胖1 小时前
【MySQL】索引
linux·数据库·mysql
Kiwi233331 小时前
产品经理-需求分析
数据库·产品经理·需求分析