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

相关推荐
chengxuyuan1213_2 分钟前
python常用基础语法
开发语言·windows·python
嶔某20 分钟前
MySql:复合查询
数据库·mysql
Ewen Seong1 小时前
mysql系列7—Innodb的redolog
数据库·mysql
m0_748240441 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
chusheng18401 小时前
Python+Django 技术实现自动化漏洞扫描系统开发
python·django·自动化·漏洞扫描·漏洞扫描系统
不爱学英文的码字机器2 小时前
在 Linux 中如何使用粘滞位 (t-bit)共享文件
linux·服务器·数据库
爱数学的程序猿2 小时前
Python入门:7.Pythond的内置容器
开发语言·python
阿正的梦工坊2 小时前
Pytorch详解 train() 和 eval() 模式会影响Layer Norm吗?(中英双语)
人工智能·pytorch·python
qq_273900232 小时前
pytorch 张量的unfold方法介绍
人工智能·pytorch·python
四口鲸鱼爱吃盐2 小时前
Pytorch | 利用MIG针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python·深度学习·计算机视觉