前面的文章中我们已经创建了新模型及其相应的访问权限,是时候与用户界面进行交互了。
数据文件(XML)
在上一篇文章中,我们通过 CSV 文件添加数据。当要加载的数据格式简单时,CSV 格式很方便。当格式比较复杂时(如加载视图结构或电子邮件模板),我们使用 XML 格式。
XML 文件必须添加到与 CSV 文件相同的文件夹中,并在 manifest.py 中进行类似定义。在安装或更新模块时,数据文件的内容也是按顺序加载的,因此针对 CSV 文件的所有说明也适用于 XML 文件。当数据链接到视图时,我们会将它们添加到视图文件夹中。
所以我们现在整个模块的结构是这样的:
在本章中,我们将通过 XML 文件加载第一个动作(action)。动作是数据库中的标准记录(record)。
在 Odoo 中,用户界面(动作、菜单和视图)主要是通过创建和组合 XML 文件中定义的记录来定义的。常见的模式是菜单 > 动作 > 视图。要访问记录,用户需要浏览多个菜单层级;最深的层级是触发打开记录列表的动作。
动作(action)
动作可以通过三种方式触发操作:
- 点击菜单项(链接到特定操作)
- 点击视图中的按钮(如果这些按钮与动作相关联)
- 作为对象上的上下文动作
本章只介绍第一种情况。第二种情况将在以后的章节中介绍,而最后一种情况则是高级主题的重点。在 "房地产 "示例中,我们希望将菜单链接到 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