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

相关推荐
2301_7644413323 分钟前
身份证校验工具
前端·python·1024程序员节
vistaup37 分钟前
Android ContentProvier
android·数据库
Pluchon41 分钟前
硅基计划5.0 MySQL 陆 视图&JDBC编程&用户权限控制
数据库·mysql·1024程序员节
摇滚侠1 小时前
Spring Boot3零基础教程,自定义 starter,把项目封装成依赖给别人使用,笔记65
数据库·spring boot·笔记
不剪发的Tony老师1 小时前
SQLiteSpy:一款轻量级的SQLite管理工具
数据库·sqlite
小宁爱Python1 小时前
从入门到实践:LangGraph 构建复杂 AI 工作流的完整指南
人工智能·python·microsoft·django
一 乐1 小时前
车辆管理|校园车辆信息|基于SprinBoot+vue的校园车辆管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·车辆管理
得物技术1 小时前
告别数据无序:得物数据研发与管理平台的破局之路
大数据·数据库·数据分析
百锦再1 小时前
Python、Java与Go:AI大模型时代的语言抉择
java·前端·vue.js·人工智能·python·go·1024程序员节
EndingCoder2 小时前
Node.js 数据查询优化技巧
服务器·javascript·数据库·node.js·数据查询优化