XML 代码结构概览
这段 XML 代码定义了 my_hostel
模块中 hostel.hostel
模型的两个视图:列表视图 (tree view) 和表单视图 (form view),以及一个动作 (action) 和两个菜单项 (menuitem)。
整体框架
<odoo>
<data>
data>
odoo>
: XML 文件的根元素,表示这是一个 Odoo 的 XML 配置文件。
: 包含所有 Odoo 记录 (records) 的容器。 这些记录通常是视图,动作,菜单项等。记录 (record) 的定义
在 标签内部,我们使用
标签来定义不同的记录。 每个记录都对应 Odoo 系统中的一条数据。
1. 列表视图 (Tree View) 的定义
<record id="view_hostel_tree" model="ir.ui.view">
<field name="name">hostel.hostel.treefield>
<field name="model">hostel.hostelfield>
<field name="arch" type="xml">
<tree string="Hostel">
<field name="name"/>
<field name="hostel_code"/>
<field name="mobile"/>
tree>
field>
record>
:
record
: 定义一条记录。id="view_hostel_tree"
: 当前记录的唯一标识符 (External ID)。 你应该为每一个
标签都定义一个 id
值,方便在 Odoo 系统中引用。model="ir.ui.view"
: 表示当前记录的类型是 ir.ui.view
,这是 Odoo 中用于存储视图配置的系统模型。hostel.hostel.tree
:
hostel.hostel
:hostel.hostel
模型。
:
arch
表示 “architecture”, 定义视图的结构。type="xml"
表示视图结构是用 XML 定义的。
:
string="Hostel"
指定了列表视图在 UI 中显示的标题。 你可以使用其他的字符串来替换。
,
,
:
name
属性指定了模型中对应的字段。总结:
record
定义了一个列表视图,用于显示 hostel.hostel
模型的数据。name
, hostel_code
和 mobile
这三个字段。2. 表单视图 (Form View) 的定义
<record id="view_hostel_form" model="ir.ui.view">
<field name="name">hostel.hostel.formfield>
<field name="model">hostel.hostelfield>
<field name="arch" type="xml">
<form string="Hostel">
<sheet>
<div class="oe_title">
<h3>
<table>
<tr>
<td style="padding-right:10px;"><field name="name" required="1"
placeholder="Name" />td>
<td style="padding-right:10px;"><field name="hostel_code"
placeholder="Code" />td>
tr>
table>
h3>
div>
<group>
<group>
<label for="street" string="Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State"
options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country"
class="o_address_country" options='{"no_open": True, "no_create": True}'/>
div>
group>
<group>
<field name="phone" widget="phone"/>
<field name="mobile" widget="phone"/>
<field name="email" widget="email" context="{'gravatar_image': True}"/>
group>
group>
sheet>
form>
field>
record>
: 类似列表视图,定义了一个类型为 ir.ui.view
的记录, id
为 view_hostel_form
。hostel.hostel.form
和 hostel.hostel
:
:
:
string="Hostel"
指定表单视图的标题。
:
:
- 一个
div
元素,使用 oe_title
CSS 类,通常用于设置表单的主要标题区域。
, , : 使用 HTML 表格来布局标题。
:
- 使用
h3
标签来显示标题。
和
:
- 定义表单中要显示的字段。
name
属性指定要显示的字段名。
required="1"
表示该字段是必填的。
placeholder="Name"
表示输入框中的占位符文本。
:
- 用于将字段分组,从而在表单中进行分栏布局。
label
标签,用于显示标签文本。
* for="street"
将标签和 street
字段关联。
* string="Address"
定义了标签的文本。
:
- 一个
div
元素,使用 o_address_format
CSS 类,通常用于显示地址格式的字段。
,
,
, field name="state_id" .../>
,
,
- 定义了地址相关的字段,使用
class
属性来指定 CSS 类,以实现特定的样式。
class="o_address_street"
, class="o_address_city"
, class="o_address_state"
, class="o_address_zip"
, class="o_address_country"
表示使用 Odoo 的地址样式。
options='{"no_open": True}'
表示在选择时,不打开相关记录的表单视图,使用弹出选择框。
options='{"no_open": True, "no_create": True}'
表示禁止创建记录。
,
,
:
- 这些字段使用
widget
属性指定了 Odoo 的特定 UI 小部件。
widget="phone"
: 将字段显示为电话号码输入框。
widget="email"
: 将字段显示为邮箱地址输入框,并且通过 context="{'gravatar_image': True}"
支持显示头像。
总结:
- 这个
record
定义了一个表单视图,用于创建和编辑 hostel.hostel
模型的数据。
- 表单视图的布局使用
sheet
来包含内容。
- 使用
group
来实现分栏布局。
- 使用
field
标签显示模型中的字段,以及配置 required
,placeholder
和 widget
等属性。
- 通过
class
和options
等属性,可以实现 Odoo 特定的样式和功能。
3. 动作 (Action) 的定义
<record model="ir.actions.act_window" id="action_hostel">
<field name="name">Hostelfield>
<field name="type">ir.actions.act_windowfield>
<field name="res_model">hostel.hostelfield>
<field name="view_mode">tree,formfield>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create Hostel.
p>
field>
record>
:
- 定义一个类型为
ir.actions.act_window
的记录, id
为 action_hostel
。
ir.actions.act_window
是 Odoo 中用于创建动作的系统模型。
Hostel
:
- 定义了动作的名称,用于在 Odoo 中显示。
ir.actions.act_window
:
* 指定了动作的类型是 ir.actions.act_window
(一个打开窗口的动作)。
hostel.hostel
:
- 定义了动作对应的模型为
hostel.hostel
模型。
tree,form
:
- 指定该动作可以使用的视图模式:列表视图 (
tree
) 和表单视图 (form
)。
* help
属性定义了动作的帮助文本, type="html"
表示帮助文本以 HTML 格式定义。
Create Hostel.
定义了当列表中没有记录时,显示的提示文字。
总结:
- 这个
record
定义了一个动作,用于打开一个窗口来管理 hostel.hostel
模型的数据。
- 该动作支持列表视图和表单视图。
- 提供了帮助文本。
4. 菜单项 (Menuitem) 的定义
<menuitem id="hostel_main_menu" name="Hostel" sequence="1"/>
<menuitem id="hostel_type_menu" name="Hostel" parent="hostel_main_menu"
action="my_hostel.action_hostel" groups="my_hostel.group_hostel_manager"
sequence="1"/>
:
id="hostel_main_menu"
定义了菜单项的唯一标识符。
name="Hostel"
定义菜单项显示的名称。
sequence="1"
定义了菜单项在同级菜单中的顺序。
:
id="hostel_type_menu"
定义了菜单项的唯一标识符。
name="Hostel"
定义菜单项显示的名称。
parent="hostel_main_menu"
定义了父菜单,表示此菜单项是 hostel_main_menu
的子菜单项。
action="my_hostel.action_hostel"
将此菜单项与之前定义的 action_hostel
动作关联。
groups="my_hostel.group_hostel_manager"
表示只有属于 my_hostel.group_hostel_manager
用户组的用户才能看到此菜单项。
sequence="1"
定义了菜单项在同级菜单中的顺序。
总结:
hostel_main_menu
定义一个主菜单,用于在 Odoo 菜单中显示。
hostel_type_menu
定义一个子菜单,并且该子菜单只有属于 my_hostel.group_hostel_manager
用户组的用户才能看到,点击该菜单将打开 action_hostel
动作。
需要记住的规范和可以理解的
- 需要记住的规范:
- XML 结构:
,
,
,
等 XML 标签及其嵌套关系。
- Odoo 模型的定义:
ir.ui.view
, ir.actions.act_window
, 和 menuitem
等。
- 外部标识符:
.
的格式,用于唯一标识记录。
id
属性的定义,每个 record
都需要一个唯一的 id
。
model
属性,指定 record
的类型,比如 ir.ui.view
。
- 视图使用
arch
来描述视图的结构, 并且定义 type="xml"
。
name
, string
, model
,res_model
等属性在不同场景下的含义。
widget
和 context
等属性的使用。
- 各种 UI 组件 (
div
, table
, tr
, td
, h1
,h3
,label
, field
, group
)的用法。
- 菜单项的
id
,name
,parent
,action
, groups
和 sequence
的用法。
- 可以理解的:
- 视图的布局:你可以根据自己的需求调整表单视图的字段布局,可以使用
group
来实现分栏,也可以使用 div
, table
等标签来组织内容。
- 字段的属性:你可以根据需求设置字段的
required
,placeholder
,widget
等属性。
- 菜单项的名称:你可以自定义菜单项的
name
和 sequence
属性。
- 视图的
string
属性: 你可以自定义视图的标题。
你可能感兴趣的:(Odoo17学习,java,前端,odoo)