视图架构

通用架构

视图的架构由 JavaScript 框架解释的 XML 数据定义。

对于大多数视图,都有一个 *.rng 文件定义属性和可能的架构。有些视图不受此类文件的约束,要么是因为它们接受 HTML 内容,要么是出于性能原因。

注解

当前上下文和用户访问权限可能会影响视图功能。

另请参阅

View records

Python表达式

在评估节点属性时,例如 readonly 修饰符,可以提供一个 Python 表达式,该表达式将在可以访问以下变量的环境中执行:

  • 当前视图中所有字段的名称,包含当前记录的值,除了 列表视图 中的 column_invisible;关联字段以ID列表的形式给出;

  • 当前记录的ID;

  • parent: 指向容器的记录;仅在 关系字段 的子视图中使用;

  • context (dict):当前视图的上下文;

  • uid (int):当前用户的 ID;

  • today (str): 当前本地日期,格式为 YYYY-MM-DD

  • now (str): 当前本地日期时间,格式为 YYYY-MM-DD hh:mm:ss

Example

<field name="field_a" readonly="True"/>
<field name="field_b" invisible="context.get('show_me') and field_a == 4"/>

Example

<field name="field_a"/>
<field name="x2m">
    <!-- sub-view -->
    <form>
        <field name="field_b" invisible="parent.field_a"/>
    </form>
</field>

表单

表单视图用于显示单条记录的数据。它们由常规的 HTML 组成,并带有额外的语义和结构组件。

表单视图的根元素是 form

<form>
    ...
</form>

根属性

可选属性可以添加到根元素 form 上以自定义视图。

string

视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该标题。

Requirement

可选的

类型

str

默认

''

create

禁用/启用视图上的记录创建。

Requirement

可选的

类型

bool

默认

True

edit

禁用/启用视图上的记录编辑。

Requirement

可选的

类型

bool

默认

True

duplicate

通过 操作 下拉菜单在视图上禁用/启用记录复制。

Requirement

可选的

类型

bool

默认

True

delete

通过 操作 下拉菜单禁用/启用视图上的记录删除功能。

Requirement

可选的

类型

bool

默认

True

js_class

webclient 将实例化的 JavaScript 组件的名称,而不是表单视图。

Requirement

可选的

类型

str

默认

''

disable_autofocus

禁用自动聚焦视图中的第一个字段。

Requirement

可选的

类型

bool

默认

False

语义组件

语义组件与 Odoo 系统紧密集成,并允许与其进行交互。

表单视图接受以下子语义组件:字段标签按钮Chatter 小部件附件预览小部件

占位符以全大写字母表示。

field: display field values

field 元素用于渲染(并可能允许编辑)当前记录的单个字段。

在表单视图中多次使用同一字段是支持的,并且这些字段可以为 invisiblereadonly 属性接收不同的值。这些字段可能具有相同的值,但可以以不同的方式显示。然而,当存在多个字段且 required 属性具有不同值时,行为无法保证。

<form>
    <field name="FIELD_NAME"/>
</form>

field 元素可以具有以下属性:

name

要渲染的字段名称。

Requirement

强制性的

类型

str

widget

用于表示字段的小部件。所选的小部件可以改变字段的渲染方式和/或编辑方式。它指的是注册到 fields 注册表中的 Javascript 实现(一个 Owl 组件)。

Requirement

可选的

类型

str

id

节点 ID。当视图中同一字段出现多次时非常有用(参见 label: display field labels)。

Requirement

可选的

类型

str

默认

字段名称

string

字段的标签。

Requirement

可选的

类型

str

默认

模型字段的 string 属性

help

当悬停在字段或其标签上时显示的工具提示。

Requirement

可选的

类型

str

默认

''

options

字段小部件的配置选项(包括默认小部件),作为评估为字典的Python表达式。

对于关联字段,以下选项可用:no_createno_quick_createno_openno_create_edit

Example

<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'FIELD_NAME', 'no_quick_create': True}"/>
Requirement

可选的

类型

Python 表达式

默认

{}

readonly

字段是否可由用户修改(False)或为只读(True),作为一个评估为布尔值的Python表达式。

Example

<field name="fname_a" readonly="True"/>
<field name="fname_b" readonly="name_a in [fname_b, parent.fname_d]"/>
Requirement

可选的

类型

Python 表达式

默认

False

required

字段是否可以留空(False)或必须设置(True),作为一个评估为布尔值的Python表达式。

Example

<field name="fname_a" required="True"/>
<field name="fname_b" required="fname_c != 3"/>
Requirement

可选的

类型

Python 表达式

默认

False

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

domain

在显示现有记录以供选择时应用的过滤器,作为一个评估为 domain 的 Python 表达式。

Example

<field name="fname" domain="[('fname_a', '=', parent.fname_b)]"/>
Requirement

可选的

类型

Python 表达式

默认

[]

Scope

关联字段

context

用于获取可能值及创建或搜索记录时的上下文,作为一个求值为字典的Python表达式。

Example

<field name="fname" context="{
    'TYPE_view_ref': 'ADDON.MODEL_view_TYPE',
    'group_by': 'FIELD_NAME',
    'default_FIELD_NAME': ANY,
    'search_default_FIELD_NAME': True,
    'OTHER_BUSINESS_KEY': ANY,
  }"/>
Requirement

可选的

类型

Python 表达式

默认

{}

Scope

关联字段

nolabel

是否应隐藏字段标签。

Requirement

可选的

类型

bool

默认

False

Scope

作为 group 元素直接子元素的字段

placeholder

显示在 字段上的帮助信息。它可以在复杂表单中替代字段标签。然而,它 不应 是数据的示例,因为用户可能会将占位符文本与已填写的字段混淆。

Requirement

可选的

类型

str

默认

''

mode

用于字段链接记录的显示模式(视图类型)的逗号分隔列表。允许的模式有:listformkanbangraph

Requirement

可选的

类型

str

默认

list

Scope

One2manyMany2many 字段

class

要在生成的元素上设置的 HTML class

样式使用了 Bootstrap 框架和 UI 图标。常见的 Odoo 类包括:

  • oe_inline:防止字段后通常的换行,并限制它们的跨度;

  • oe_left, oe_right: 将元素 浮动 到相应的方向;

  • oe_read_only, oe_edit_only: 仅在相应的表单模式下显示元素;

  • oe_avatar:用于图像字段,将图像显示为“头像”(最大 90x90 正方形);

  • oe_stat_button:定义了一种特定的渲染方式,用于动态显示信息,同时可点击以执行某个操作。

Example

<field name="fname" class="oe_inline oe_left oe_avatar"/>

Example

<button type="object" name="ACTION" class="oe_stat_button" icon="FONT_AWESOME" help="HELP">
   <div class="o_field_widget o_stat_info">
      <span class="o_stat_value"><FIELD/></span>
      <span class="o_stat_text">TEXT</span>
   </div>
</button>
Requirement

可选的

类型

str

默认

''

filename

提供文件名相关字段的名称。

Requirement

可选的

类型

str

默认

''

Scope

Binary 字段

password

该字段是否存储密码,因此其数据不应显示。

Requirement

可选的

类型

bool

默认

False

Scope

Char 字段

kanban_view_ref

在移动环境中选择记录时应使用的特定看板 视图记录 的 XMLID。

Requirement

可选的

类型

str

默认

''

Scope

关联字段

default_focus

视图打开时是否聚焦该字段。此设置只能应用于视图中的一个字段。

Requirement

可选的

类型

bool

默认

False

注解

关系字段 节点可以包含特定的子视图。

Example

<field name="children_ids">
   <list>
      <field name="name"/>
   </list>
   <form>
      <field name="id"/>
      <field name="name"/>
   </form>
</field>

label: display field labels

field 组件没有直接放置在 group 内,或者当其 nolabel 属性被设置时,字段的标签不会自动与其值一起显示。label 组件是手动显示字段标签的替代方式。

<form>
    <div class="col col-md-auto">
        <label for="FIELD_NAME" string="LABEL"/>
        <div>
            <field name="FIELD_NAME" class="oe_inline"/>
        </div>
    </div>
</form>

label 元素可以具有以下属性:

for

与标签相关联的字段的引用。它可以是字段的名称,或其 id(在 field 上设置的 id 属性)。

当视图中同一字段出现多次,并且有多个 label 组件与这些字段节点相关联时,这些标签必须具有唯一的 for 属性;在这种情况下,引用相应字段节点的 id 属性。

Requirement

强制性的

类型

str

string

要显示的标签。

Requirement

可选的

类型

str

默认

字段的标签来自模型上的字段定义

class

要在生成的元素上设置的 HTML class

样式使用了 Bootstrap 框架和 UI 图标。常见的 Odoo 类包括:

  • oe_inline:防止字段后通常的换行,并限制它们的跨度;

  • oe_left, oe_right: 将元素 浮动 到相应的方向;

  • oe_read_only, oe_edit_only: 仅在相应的表单模式下显示元素;

  • oe_avatar:用于图像字段,将图像显示为“头像”(最大 90x90 正方形);

  • oe_stat_button:定义了一种特定的渲染方式,用于动态显示信息,同时可点击以执行某个操作。

Example

<field name="fname" class="oe_inline oe_left oe_avatar"/>

Example

<button type="object" name="ACTION" class="oe_stat_button" icon="FONT_AWESOME" help="HELP">
   <div class="o_field_widget o_stat_info">
      <span class="o_stat_value"><FIELD/></span>
      <span class="o_stat_text">TEXT</span>
   </div>
</button>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

button: display action buttons

<form>
    <button type="object" name="ACTION" string="LABEL"/>
    <button type="object" name="ACTION" icon="FONT_AWESOME"/>
</form>

button 元素可以具有以下属性:

type

按钮的类型指示其行为方式。它可能有两种不同的值:

object

调用视图模型上的方法。按钮的 name 是使用当前记录ID和当前 context 调用的方法。

action

加载并执行一个 ir.actions 动作记录。按钮的 name 是要加载的动作的 XMLID。context 会扩展视图的模型(作为 active_model)和当前记录(作为 active_id)。

Example

<button type="object" name="action_create_new" string="Create document"/>
<button type="action" name="addon.action_create_view" string="Create and Edit"/>
Requirement

如果未设置 special 属性,则为必填项

类型

str

name

如果 typeobject,则调用的方法。如果 typeaction,则加载操作的 XMLID,可以是原始格式或 %(XMLID)d 格式。

Requirement

可选的

类型

str

默认

''

string

如果没有 icon,则为按钮的文本,否则为图标的 alt 文本。

Example

<button type="object" name="action_create_new" string="Create document"/>
Requirement

可选的

类型

str

默认

''

icon

用于显示按钮的图标。请参阅 icons 获取参考列表。

Example

<button type="object" name="remove" icon="fa-trash"/>
Requirement

可选的

类型

str

默认

''

help

鼠标悬停时显示的工具提示信息。

Example

<button type="object" name="remove" icon="fa-trash" help="Revoke"/>
Requirement

可选的

类型

str

默认

''

context

执行按钮调用时合并到视图上下文中的上下文,作为一个评估为字典的Python表达式。

Example

<button name="button_confirm" type="object" context="{'BUSINESS_KEY': ANY}" string="LABEL"/>
Requirement

可选的

类型

Python 表达式

默认

{}

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

class

要在生成的元素上设置的 HTML class

样式使用了 Bootstrap 框架和 UI 图标。常见的 Odoo 类包括:

  • oe_inline:防止字段后通常的换行,并限制它们的跨度;

  • oe_left, oe_right: 将元素 浮动 到相应的方向;

  • oe_read_only, oe_edit_only: 仅在相应的表单模式下显示元素;

  • oe_avatar:用于图像字段,将图像显示为“头像”(最大 90x90 正方形);

  • oe_stat_button:定义了一种特定的渲染方式,用于动态显示信息,同时可点击以执行某个操作。

Example

<field name="fname" class="oe_inline oe_left oe_avatar"/>

Example

<button type="object" name="ACTION" class="oe_stat_button" icon="FONT_AWESOME" help="HELP">
   <div class="o_field_widget o_stat_info">
      <span class="o_stat_value"><FIELD/></span>
      <span class="o_stat_text">TEXT</span>
   </div>
</button>
Requirement

可选的

类型

str

默认

''

special

在对话框中打开的表单视图按钮的行为。它可以有两个不同的值:

save

保存记录并关闭对话框。

cancel

关闭对话框而不保存。

Example

<button special="cancel" icon="fa-trash"/>
Requirement

可选的

类型

str

默认

''

confirm

在执行按钮操作之前显示的确认信息(供用户接受)。

Example

<button name="action_destroye_gate" string="Send the goa'uld" type="object" confirm="Do you confirm the action?"/>
Requirement

可选的

类型

str

默认

''

data-hotkey

绑定到按钮的热键(keyboard_shortcut,类似于 accesskey)。当 alt 键与选定的字符一起按下时,或者当 shift+ 前置到值时,与 shift 键和选定的字符一起按下时,该热键将被启用。

Example

<button type="object" name="action_confirm" string="Confirm" data-hotkey="c"/>
<button type="object" name="action_tear" string="Tear the sheet" data-hotkey="shift+k"/>
Requirement

可选的

类型

str

默认

''

Chatter 小部件

The chatter widget 是通信和日志工具,允许直接从记录(任务、订单、发票、事件、笔记…)中向同事和客户发送电子邮件。

当模型继承 mail.thread 混入时,会添加一个带有 oe_chatter 类的 div 元素。

Example

<form>
    <sheet>
        ...
    </sheet>
    <div class="oe_chatter">
        <field name="message_follower_ids"/>
        <field name="activity_ids"/>
        <field name="message_ids" options="OPTIONS"/>
    </div>
</form>

附件预览小部件

附件预览小部件通过一个带有类 o_attachment_preview div 元素添加。

Example

<form>
    <sheet>
        ...
    </sheet>
    <div class="o_attachment_preview"/>
<form>

结构组件

结构组件提供结构或“视觉”特征,具有较少的逻辑。它们用作表单视图中的元素或元素集。

表单视图接受以下子结构组件:group, sheet, notebook, notebook, newline, separator, header, footer, 按钮容器, 和 标题容器

占位符以全大写字母表示。

group: define columns layouts

group 元素用于定义表单中的列布局。默认情况下,组定义两列,且组的大多数直接子元素占据一列。

作为组直接子元素的 field 元素默认会显示一个 label,并且标签和字段本身的 colspan 都为 1

子元素水平排列(在换行之前,它们会尝试填充下一列)。

 <form>
     <group>
         ...
     </group>
</form>

group 元素可以具有以下属性:

string

为该组显示的标题。

Requirement

可选的

类型

str

默认

''

col

group 中的列数。

Requirement

可选的

类型

int

默认

2

colspan

子元素占据的列数。

Requirement

可选的

类型

int

默认

1

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

可能的渲染结构和表示

../../../_images/form_group.svg
<group>
    <field name="a" string="custom"/>
    <field name="b"/>
</group>
<group string="title 1">
    <group string="title 2">
        <field name="c"/>
        <field name="d"/>
    </group>
    <group>
        <field name="e"/>
        <field name="f"/>
        <field name="g"/>
    </group>
</group>
<group col="12">
    <group colspan="8">
        <field name="h"/>
    </group>
    <group colspan="4">
        <field name="i"/>
    </group>
</group>

sheet:使布局具有响应性

sheet 元素可以作为 form 根元素的直接子元素使用,以实现更窄且更具响应性的表单布局(居中页面、边距等)。它通常包含 group 元素。

<form>
    <sheet>
        ...
    </sheet>
</form>

notebookpage:添加选项卡部分

notebook 元素定义了一个带标签的部分。每个标签通过一个 page 子元素定义。

notebook 元素不应放置在 group 元素内。

<form>
    <notebook>
        <page string="LABEL">
            ...
        </page>
    </notebook>
</form>

page 元素可以具有以下属性:

string

选项卡的标题。

Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

可能的渲染结构和表示

../../../_images/form_notebook.svg
<form>
    <notebook>
        <page string="Page1">
            ...
        </page>
        <page string="Page2">
            ...
        </page>
    </notebook>
</form>

newline: start new group rows

newline 元素用于 group 元素内,以提前结束当前行并立即切换到新行,而无需事先填充任何剩余的列。

<form>
    <group>
        ...
        <newline/>
        ...
    </group>
</form>

可能的渲染结构和表示

../../../_images/form_newline.svg
<form>
    <group string="Title 1">
        <group string="Title 1.1">...</group>
        <newline/>
        <group string="Title 1.2">...</group>
        <group string="Title 1.3">...</group>
    </group>
</form>

separator: 添加水平间距

separator 元素在组内的元素之间添加垂直间距。

<form>
    ...
    <separator/>
    ...
</form>

<separator> 元素可以具有以下属性:

string

作为章节标题的标题。

Requirement

可选的

类型

str

默认

''

可能的渲染结构和表示

../../../_images/form_separator.svg
<form>
    <group>
        <FIELD/>
        <separator string="Title 1"/>
        <FIELD/>
        <group>
            <FIELD/>
            <separator string="Title 2"/>
            <FIELD/>
        </group>
        <group>
            <FIELD/>
            <FIELD/>
        </group>
    </group>
</form>

小技巧

separator 元素可用于在同一内部 group 元素内的元素之间实现视觉分隔,同时保持它们的水平对齐。

header: 显示工作流按钮和状态

header 元素与 sheet 元素结合,提供了一个位于表单本身之上的全宽区域,通常用于显示工作流 button 元素和一个呈现为状态小部件的 field 元素。

<form>
    <header>
        <BUTTONS/>
    </header>
    <sheet>
        ...
    </sheet>
</form>

Example

<header>
    <button string="Reset" type="object" name="set_draft" invisible="state != 'done'"/>
    <field name="state" widget="statusbar" statusbar_visible="draft,posted" options="{'clickable': 1}"/>
</header>

按钮容器

可以使用带有 button_box 类的 div 元素创建一个 button 元素容器。

<form>
    <div name="button_box">
        <BUTTONS/>
    </div>
<form>

可能的渲染结构和表示

../../../_images/form_button_box.svg
<form>
    <div name="button_box">
        <button type="edit" name="edit" icon="fa-edit" string="Button1"/>
        <button type="object" name="my_action" icon="fa-dollar">
            <field name="total_inv" widget="statinfo" string="Invoices"/>
        </button>
    </div>
<form>

标题容器

可以使用带有类 oe_titlediv 元素创建一个标题 field 元素容器。

<form>
    <sheet>
        <div class="oe_title">
            <h1><FIELD/></h1>
        </div>
    </sheet>
<form>

设置

设置视图是对 表单 视图的一种定制。它们用于在集中位置显示设置。与通用表单视图的不同之处在于,它们具有搜索栏和侧边栏。

Example

<app string="CRM" name="crm">
    <setting type="header" string="Foo">
        <field name="foo" title="Foo?."/>
        <button name="nameAction" type="object" string="Button"/>
    </setting>
    <block title="Title of group Bar">
        <setting help="this is bar" documentation="/applications/technical/web/settings/this_is_a_test.html">
            <field name="bar"/>
        </setting>
        <setting string="This is Big BAR" company_specific="1">
            <field name="bar"/>
        </setting>
    </block>
    <block title="Title of group Foo">
        <setting string="Personalize setting" help="this is full personalize setting">
            <div>This is a different setting</div>
        </setting>
    </block>
</app>

组件

设置视图接受 表单 视图中的 字段标签按钮 元素,以及三个额外的子元素:应用设置

占位符以全大写字母表示。

app: declare the application

app 元素用于在设置视图中声明应用程序。它会在视图的侧边栏上创建一个带有应用程序徽标的条目。在搜索时,它还充当分隔符。

<form>
    <app string="NAME" name="TECHNICAL_NAME">
    ...
    </app>
</form>

app 元素可以具有以下属性:

string

应用程序的名称。

Requirement

强制性的

类型

str

name

应用程序的技术名称(模块的名称)。

Requirement

强制性的

类型

str

logo

相对路径 到 logo 的位置。

Requirement

可选的

类型

path

默认

使用 name 属性计算的路径: /name/static/description/icon.png

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

block:声明一组设置

block 元素用于声明一组设置。此组可以包含标题和描述。

 <form>
     <app string="NAME" name="TECHNICAL_NAME">
         ...
         <block title="TITLE">
             ...
         </block>
         ...
     </app>
</form>

block 元素可以具有以下属性:

title

设置块的标题。可以根据其值进行搜索。

Requirement

可选的

类型

str

默认

''

help

设置块的描述。可以根据其值进行搜索。

Requirement

可选的

类型

str

默认

''

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

setting: declare the setting

setting 元素用于声明设置本身。

设置中的第一个 field 元素被用作主字段。如果它是布尔字段,则放置在左侧面板上,否则放置在右侧面板的顶部。如果未定义 string 属性,该字段还用于创建设置标签。

setting 元素也可以包含其他元素(例如 HTML)。所有这些元素都会在右侧面板中呈现。

<form>
    <app string="NAME" name="TECHNICAL_NAME">
        <block title="TITLE">
            ...
            <setting string="SETTING_NAME">
                ...
                <field name="FIELD_NAME"/>
                ...
            </setting>
            ...
        </block>
    </app>
</form>

<setting> 元素可以具有以下属性:

type

默认情况下,设置项在视觉上分为两个面板(左侧和右侧),用于编辑给定的 字段。通过定义 type="header",会渲染一种特殊的设置项。此设置项用于修改其他设置项的范围。例如,在网站应用程序中,此设置项用于指示其他设置项适用于哪个网站。标题设置项在视觉上表现为屏幕顶部的横幅。

Requirement

可选的

类型

str

默认

''

string

用作设置标签的文本。

Requirement

可选的

类型

str

默认

第一个字段的标签

title

用作工具提示的文本。

Requirement

可选的

类型

str

默认

''

help

设置的描述。此文本显示在设置标签下方(带有 text-muted 类)。

Requirement

可选的

类型

str

默认

''

company_dependent

该设置是否为公司特定。如果设置,将在设置标签旁边显示一个图标。

它仅接受值 '1'

Requirement

可选的

类型

str

默认

''

documentation

设置的文档 path 。如果设置了,将在设置标签旁边显示一个可点击的图标。路径可以是绝对路径或 relative path 。在后一种情况下,它是相对于 https://www.odoo.com/documentation/<version> 的。

Requirement

可选的

类型

path_

默认

''

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

列表

列表视图的根元素是 list`(之前的名称是 `tree)。

可能的渲染结构和表示

../../../_images/list.svg
<list>
    ...
</list>

根属性

可选属性可以添加到根元素 list 以自定义视图。

string

视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该标题。

Requirement

可选的

类型

str

默认

''

create

禁用/启用视图上的记录创建。

Requirement

可选的

类型

bool

默认

True

edit

禁用/启用视图上的记录编辑。

Requirement

可选的

类型

bool

默认

True

delete

通过 操作 下拉菜单禁用/启用视图上的记录删除功能。

Requirement

可选的

类型

bool

默认

True

import

禁用/启用从视图数据导入记录。

Requirement

可选的

类型

bool

默认

True

export_xlsx

禁用/启用视图上的记录导出到数据。

Requirement

可选的

类型

bool

默认

True

editable

使视图的记录可原地编辑,并允许从列表的一行创建新记录。它可以有两个不同的值:

top

新记录从列表顶部开始创建。

bottom

新记录从列表底部创建。

内联 表单 视图的架构源自列表视图。因此,表单视图字段和按钮上有效的大多数属性也被列表视图接受,尽管如果列表视图不可编辑,这些属性可能没有任何意义。

重要

如果 edit 属性设置为 False,则此行为将被禁用。

Requirement

可选的

类型

str

默认

''

multi_edit

激活多编辑功能,允许将字段更新为多个记录的相同值。

它仅接受值 '1'

Requirement

可选的

类型

str

默认

''

open_form_view

在每行末尾显示一个按钮,以在表单视图中打开记录。

如果视图不可编辑,则此操作无效。

Requirement

可选的

类型

bool

默认

False

default_group_by

如果未通过操作或当前 搜索 指定分组,则默认按此字段对记录进行分组。

Requirement

可选的

类型

str

默认

''

default_order

一个以逗号分隔的字段名称列表,用于覆盖通过 _order 属性在模型上定义的排序。

要反转字段的排序顺序,在其后加上 desc,并用空格分隔。

Example

<list default_order="sequence,name desc">
    ...
</list>
Requirement

可选的

类型

str

默认

''

decoration-<style>

应用于匹配记录行的样式,作为一个评估为布尔值的Python表达式。

<style> 必须替换为以下之一:bf`(加粗)、`it`(斜体)、`infowarningdangermutedprimarysuccess

Example

<list decoration-danger="field_qty &gt; field_limit">
    ...
</list>
Requirement

可选的

类型

Python 表达式

默认

False

limit

页面的默认大小。它必须严格为正数。

Requirement

可选的

类型

int

默认

80 用于列表视图,40 用于表单视图中的 X2many 列表

groups_limit

列表视图分组时,页面上的默认分组数量。该值必须严格为正数。

Requirement

可选的

类型

int

默认

80 用于列表视图,40 用于表单视图中的 X2many 列表

expand

是否在列表视图分组时默认展开第一级分组。

警告

可能会很慢,取决于组的数量。

Requirement

可选的

类型

bool

默认

False

sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

组件

列表视图接受以下子元素:字段按钮分组标题控制和创建

占位符以全大写字母表示。

field: display field values

field 元素将所有当前记录的单个字段呈现(并可能允许编辑)为一列。

在列表视图中多次使用同一字段是不被支持的

<list>
    <field name="FIELD_NAME"/>
</list>

field 元素可以具有以下属性:

name

要渲染的字段名称。

Requirement

强制性的

类型

str

widget

用于表示字段的小部件。所选的小部件可以改变字段的渲染方式和/或编辑方式。它指的是注册到 fields 注册表中的 Javascript 实现(一个 Owl 组件)。

Requirement

可选的

类型

str

string

字段的标签。

Requirement

可选的

类型

str

默认

模型字段的 string 属性

optional

使字段的可见性可选。字段的列可以通过视图标题上的按钮隐藏或显示。

它可以有两个不同的值:

show

默认显示该字段。

hide

该字段默认隐藏。

Example

<field name="fname_a" optional="show"/>
<field name="fname_b" optional="hide"/>
Requirement

可选的

类型

str

readonly

字段是否可由用户修改(False)或为只读(True),作为一个评估为布尔值的Python表达式。

Example

<field name="fname_a" readonly="True"/>
<field name="fname_b" readonly="name_a in [fname_b, parent.fname_d]"/>
Requirement

可选的

类型

Python 表达式

默认

False

required

字段是否可以留空(False)或必须设置(True),作为一个评估为布尔值的Python表达式。

Example

<field name="fname_a" required="True"/>
<field name="fname_b" required="fname_c != 3"/>
Requirement

可选的

类型

Python 表达式

默认

False

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

column_invisible

列是否可见(False)或隐藏(True),作为一个评估为布尔值的 Python 表达式。

invisible 不同,它影响整个列,并且在评估时不考虑子树的值。

Example

<field name="product_is_late" column_invisible="parent.has_late_products == False"/>
<button type="object" name="action_confirm" column_invisible="context.get('hide_confirm')"/>
Requirement

可选的

类型

Python 表达式

默认

False

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

decoration-<style>

应用于匹配记录字段的样式,作为一个评估为布尔值的 Python 表达式。

<style> 必须替换为以下之一:bf`(加粗)、`it`(斜体)、`infowarningdangermutedprimarysuccess

Example

<field name="name" decoration-bf="1"/>
<field name="quantity" decoration-info="state == 'draft'"/>
Requirement

可选的

类型

Python 表达式

默认

False

sum, avg

显示在列底部的聚合值。聚合仅基于当前显示的记录进行计算。聚合操作必须与对应字段的 aggregator 相匹配。

Example

<field name="sent" sum="Total" />
<field name="clicks_ratio" avg="Average"/>
Requirement

可选的

类型

str

默认

''

width

列表视图始终尝试优化列之间的可用空间。对于某些字段类型,这是通过根据字段类型强制设置宽度来实现的。例如,我们确切知道显示日期所需的像素数,因此可以确保日期字段的列不会占用超过严格必要的空间,从而为其他列留下额外的空间。然而,框架无法为每种字段类型猜测合适的宽度。例如,字符字段可以用于编码大值或3字母的国家代码。在后一种情况下,可以直接在 arch 中设置宽度(例如 width="40px")。它表示渲染单元格内值所需的宽度(始终以像素为单位)。列的宽度将是给定值与单元格左右内边距的总和。

Requirement

可选的

类型

str

默认

''

nolabel

字段的列标题是否应保持为空。如果设置,该列将不可排序。

它仅接受值 '1'

Requirement

可选的

类型

str

默认

''

注解

当列表视图被分组时,数字字段会被汇总并显示在每个组中。此外,如果一个组中有太多记录,分页器会出现在组行的右侧。因此,在列表视图可能被分组的情况下,将数字字段放在最后一列是一种不好的做法。然而,对于表单视图中的X2many字段来说,这不会造成问题,因为它们不能被分组。

可能的渲染结构和表示

../../../_images/list_field.svg
<list>
    <field name="name" string="My Custom Name"/>
    <field name="amount" sum="Total"/>
    <field name="currency_id"/>
    <field name="tax_id"/>
</list>

button: display action buttons

<list>
    <button type="object" name="ACTION" string="LABEL"/>
    <button type="object" name="ACTION" icon="FONT_AWESOME"/>
</list>

button 元素可以具有以下属性:

type

按钮的类型指示其行为方式。它可能有两种不同的值:

object

调用视图模型上的方法。按钮的 name 是使用当前记录ID和当前 context 调用的方法。

action

加载并执行一个 ir.actions 动作记录。按钮的 name 是要加载的动作的 XMLID。context 会扩展视图的模型(作为 active_model)和当前记录(作为 active_id)。

Example

<button type="object" name="action_create_new" string="Create document"/>
<button type="action" name="addon.action_create_view" string="Create and Edit"/>
Requirement

如果未设置 special 属性,则为必填项

类型

str

name

如果 typeobject,则调用的方法。如果 typeaction,则加载操作的 XMLID,可以是原始格式或 %(XMLID)d 格式。

Requirement

可选的

类型

str

默认

''

string

如果没有 icon,则为按钮的文本,否则为图标的 alt 文本。

Example

<button type="object" name="action_create_new" string="Create document"/>
Requirement

可选的

类型

str

默认

''

icon

用于显示按钮的图标。请参阅 icons 获取参考列表。

Example

<button type="object" name="remove" icon="fa-trash"/>
Requirement

可选的

类型

str

默认

''

help

鼠标悬停时显示的工具提示信息。

Example

<button type="object" name="remove" icon="fa-trash" help="Revoke"/>
Requirement

可选的

类型

str

默认

''

context

执行按钮调用时合并到视图上下文中的上下文,作为一个评估为字典的Python表达式。

Example

<button name="button_confirm" type="object" context="{'BUSINESS_KEY': ANY}" string="LABEL"/>
Requirement

可选的

类型

Python 表达式

默认

{}

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

column_invisible

列是否可见(False)或隐藏(True),作为一个评估为布尔值的 Python 表达式。

invisible 不同,它影响整个列,并且在评估时不考虑子树的值。

Example

<field name="product_is_late" column_invisible="parent.has_late_products == False"/>
<button type="object" name="action_confirm" column_invisible="context.get('hide_confirm')"/>
Requirement

可选的

类型

Python 表达式

默认

False

class

要在生成的元素上设置的 HTML class

样式使用了 Bootstrap 框架和 UI 图标。常见的 Odoo 类包括:

  • oe_inline:防止字段后通常的换行,并限制它们的跨度;

  • oe_left, oe_right: 将元素 浮动 到相应的方向;

  • oe_read_only, oe_edit_only: 仅在相应的表单模式下显示元素;

  • oe_avatar:用于图像字段,将图像显示为“头像”(最大 90x90 正方形);

  • oe_stat_button:定义了一种特定的渲染方式,用于动态显示信息,同时可点击以执行某个操作。

Example

<field name="fname" class="oe_inline oe_left oe_avatar"/>

Example

<button type="object" name="ACTION" class="oe_stat_button" icon="FONT_AWESOME" help="HELP">
   <div class="o_field_widget o_stat_info">
      <span class="o_stat_value"><FIELD/></span>
      <span class="o_stat_text">TEXT</span>
   </div>
</button>
Requirement

可选的

类型

str

默认

''

可能的渲染结构和表示

../../../_images/list_button.svg
<list>
    <field name="name"/>
    <button type="edit" name="edit" icon="fa-edit" title="Edit"/>
    <button type="object" name="my_method" string="Button1" column_invisible="context.get('hide_button')" invisible="amount &gt; 3"/>
    <field name="amount"/>
    <field name="currency_id"/>
    <field name="tax_id"/>
</list>

groupby: define group headers

groupby 元素用于在通过 Many2one 字段对记录进行分组时,使用 button 元素定义组头。它还接受 field 元素,这些元素可用于修饰符。因此,这些字段属于 Many2one 协同模型。这些额外的字段是批量获取的。

<list>
    ...
    <groupby name="FIELD_NAME">
        <BUTTONS/>
        <FIELDS/>
    </groupby>
</list>

groupby 元素可以具有以下属性:

name

用作标题的 Many2one 字段的名称。

可以定义一个特殊的 button 元素,其 type="edit" 用于打开 Many2one 字段的表单视图。

Requirement

强制性的

类型

str

可能的渲染结构和表示

../../../_images/list_groupby.svg
<list>
    <field name="name"/>
    <field name="amount"/>
    <field name="currency"/>
    <field name="tax_id"/>

    <groupby name="partner_id">
        <button type="edit" name="edit" icon="fa-edit" title="Edit"/>
        <field name="email"/>
        <button type="object" name="my_method" string="Button1" invisible="email == 'jhon@conor.com'"/>
    </groupby>
</list>

注解

groupby 元素内的字段仅用于获取和存储值,但从不显示。

header: 显示工作流按钮

<list>
    <header>
        <BUTTONS/>
    </header>
    ...
</list>

header 元素接受以下子元素:

button

button 元素允许在控制面板中定义按钮。它与 列表视图中的按钮元素 相同,但当放置在 header 元素内时,它接受一个额外的属性:

display

使按钮始终可用,无需选择记录。

它仅接受值 always

Example

<header>
    <button name="toDoAlways" type="object" string="Always displayed" display="always"/>
    <button name="toDoSelection" type="object" string="Displayed if selection"/>
</header>
Requirement

可选的

类型

str

默认

''

可能的渲染结构和表示

../../../_images/list_header.svg
<list>
    <header>
        <button type="object" name="to_draft" string="Button1" invisible="context.get('hide_button')"/>
    </header>
    <field name="name"/>
    <field name="amount"/>
    <field name="currency"/>
    <field name="tax_id"/>
</list>

controlcreate:添加内联创建按钮

control 元素定义了一个接受创建按钮的控制行。每个创建按钮通过 create 元素定义。

<list>
   <control>
       <create string="LABEL"/>
       <BUTTONS/>
    </control>
    ...
</list>

control 元素不接受任何属性。

create 元素可以具有以下属性:

string

按钮的文本。

Requirement

强制性的

类型

str

context

执行按钮调用时合并到视图上下文中的上下文,作为一个评估为字典的Python表达式。

Requirement

可选的

类型

Python 表达式

默认

{}

可能的渲染结构和表示

../../../_images/list_control.svg
<list>
    <field name="name"/>
    <field name="amount"/>
    <field name="currency"/>
    <field name="tax_id"/>
    <control>
        <create string="Add a item"/>
        <create string="Add a section" context="{'default_type': 'section'}"/>
        <create string="Add a note" context="{'default_type': 'note'}"/>
    </control>
</list>

注解

使用 control 元素仅在列表视图位于 One2manyMany2many 字段内时才有意义。如果定义了任何 create 元素,它将覆盖默认的 添加一行 按钮。

组件

搜索视图接受以下子元素:fieldfilterseparatorgroupsearchpanel

占位符以全大写字母表示。

field: 基于字段值进行过滤

field 元素定义了带有用户提供值的域或上下文。当生成搜索域时,字段域会相互连接,并通过 AND 运算符与过滤器结合使用。

<search>
    <field name="FIELD_NAME"/>
</search>

field 元素可以具有以下属性:

name

用于筛选的字段名称。

Requirement

强制性的

类型

str

string

字段的标签。

Requirement

可选的

类型

str

默认

模型字段的 string 属性

operator

默认情况下,字段生成的域形式为 [(name, operator, value)],其中 name 是字段的名称,value 是用户提供的值,可能经过过滤或转换(例如,用户应提供选择字段值的 标签,而不是值本身)。

operator 属性允许覆盖默认的操作符,该操作符取决于字段的类型(例如,浮点数字段使用 =,字符字段使用 ilike,而 many2one 字段使用 child_of)。

Requirement

可选的

类型

str

默认

=

filter_domain

用作字段搜索域的域,作为一个Python表达式,其计算结果为一个 domain

It 可以使用 self 变量将提供的值注入自定义域中。与仅使用 operator 属性相比,它可以用于生成显著更灵活的域(例如,同时搜索多个字段)。

如果同时提供了 operatorfilter_domain 属性,filter_domain 优先。

Requirement

可选的

类型

Python 表达式

默认

[]

context

要合并到搜索视图所针对视图的上下文中的上下文,作为一个评估为字典的Python表达式。

它可以包含用户提供的值,这些值在 self 变量下可用。

Requirement

可选的

类型

Python 表达式

默认

{}

domain

应用于允许自动完成字段的完成结果的过滤器(例如,Many2one)。

Requirement

可选的

类型

Python 表达式

默认

[]

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

可能的渲染结构和表示

../../../_images/search_field.svg
<search>
    <field name="name" string="My Custom Name"/>
    <field name="amount"/>
    <field name="currency_id"/>
    <field name="ref" filter_domain="[('name', 'like', self)]"/>
</search>

filter: 创建预定义的过滤器

filter 元素用于创建可在搜索视图中切换的预定义过滤器。它允许向搜索上下文 传递给数据视图以进行搜索/过滤的上下文 添加数据,或向搜索过滤器追加新的部分。

<search>
    <filter string="LABEL" domain="DOMAIN"/>
</search>

filter 元素可以具有以下属性:

name

过滤器的技术名称。它可以用于 默认启用 或作为 继承钩子

Requirement

强制性的

类型

str

string

过滤器的标签。

Requirement

强制性的

类型

str

help

悬停在过滤器上时显示的工具提示。

Requirement

可选的

类型

str

默认

''

domain

作为搜索域的一部分,附加到操作域的域。

Requirement

可选的

类型

Python 表达式

默认

[]

date

用于过滤的 datedatetime 字段的名称。

当使用此属性时,它会在 过滤器 菜单的子菜单中创建一组可用的过滤器。这些过滤器是时间相关的,但不是动态的,因为它们的域是在控制面板实例化时评估的。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date"/>

默认情况下,这些过滤器包含一个下拉菜单,其中包含不同的子过滤器,允许您根据月份、季度和年份进行过滤。此外,您可以创建自定义子过滤器,允许使用域进行过滤。这些自定义过滤器必须具有以下属性:namestringdomain

Example

<filter string="Creation Date" name="filter_create_date" date="create_date">
   <filter name="create_date_last_30_days" string="Last 30 Days" domain="[('create_date', '&gt;', datetime.datetime.combine(context_today() - relativedelta(days=30), datetime.time(23, 59, 59)).to_utc())]"/>
</filter>

请注意,以这种方式定义的所有自定义过滤器彼此之间以及与其他子过滤器之间是互斥的。

Requirement

可选的

类型

str

默认

''

start_month

日期过滤器下拉菜单中显示的最早月份,作为相对于当前月份的偏移量。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" start_month="-3"/>

如果当前月份是二月,下拉菜单中可选的最早月份将是十一月。

Requirement

可选的

类型

int

默认

-2

Scope

具有非空 date 属性的过滤器

end_month

日期过滤器下拉菜单中显示的最远月份,相对于当前月份的偏移量。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" end_month="2"/>

如果当前月份是二月,下拉菜单中可选的最新月份将是三月。

Requirement

可选的

类型

int

默认

0

Scope

具有非空 date 属性的过滤器

start_year

日期过滤器下拉菜单中显示的最早年份,作为相对于当前年份的偏移量。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" start_year="-3"/>

如果当前年份是2024年,下拉菜单中可选择的最早年份将是2021年。

Requirement

可选的

类型

int

默认

-2

Scope

具有非空 date 属性的过滤器

end_year

日期过滤器下拉菜单中显示的最新年份,作为相对于当前年的偏移量。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" end_year="2"/>

如果当前年份是2024年,下拉菜单中可选择的最新年份将是2025年。

Requirement

可选的

类型

int

默认

0

Scope

具有非空 date 属性的过滤器

default_period

基于时间的过滤器(带有 date 属性)的默认周期。它必须是单个有效的过滤器 ID,或由逗号分隔的有效过滤器 ID 列表。

有效的过滤器 ID 包括以下内容:

  • first_quartersecond_quarterthird_quarterfourth_quarter

  • monthmonth-xmonth+x 中的一个,其中 x 是介于 start_monthend_month 之间的非零整数值。

  • yearyear-xyear+x 中的一个,其中 x 是介于 start_yearend_year 之间的非零整数值。

  • 过滤器内定义的任何自定义过滤器的 name,前面加上 custom_

过滤器必须位于视图初始化时激活的默认过滤器集中。

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" default_period="year,month-1"/>

Example

<filter string="Creation Date" name="filter_create_date" date="create_date" default_period="custom_create_date_last_30_days">
   <filter name="create_date_last_30_days" string="Last 30 Days" domain="[('create_date', '&gt;', datetime.datetime.combine(context_today() - relativedelta(days=30), datetime.time(23, 59, 59)).to_utc())]"/>
</filter>
Requirement

可选的

类型

str

默认

month,如果不可用则为最接近当前月份的值

Scope

具有非空 date 属性的过滤器

invisible

元素是否可见(False)或隐藏(True),作为一个评估为布尔值的Python表达式。

注解

invisible 属性有两种用途:

  • 可用性:根据内容,避免视图过载,使用户更易于阅读。

  • 技术性:字段必须在视图中存在(不可见即可)才能在 Python 表达式中使用。

Example

<field name="fname_b" invisible="fname_c != 3 and fname_a == parent.fname_d"/>
<group invisible="fname_c != 4">
    <field name="fname_c"/>
    <field name="fname_d"/>
<group>
Requirement

可选的

类型

Python 表达式

默认

False

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

context

上下文合并到操作的域中以生成搜索域

上下文键 group_by 设置为字段值可用于定义 Group By 菜单中可用的组。当字段类型为 datedatetime 时,过滤器会生成 Group By 菜单的子菜单,并提供以下间隔选项:YearQuarterMonthWeekDay。当过滤器在视图初始化时激活的默认过滤器集中时,默认情况下记录按月份分组。可以通过使用语法 date_field:interval 来更改此设置。

Example

<filter string="Category" name="groupby_category" context="{'group_by': 'category_id'}"/>
<filter string="Creation Date" name="groupby_create_date" context="{'group_by': 'create_date:week'}"/>

注解

read_groups 按字段分组的结果可能受其 group_expand 属性的影响,从而在需要时显示空组。更多信息,请参阅 Field

Requirement

可选的

类型

Python 表达式

默认

{}

小心

过滤器序列(在没有非过滤器元素分隔的情况下)被视为包含性组合:它们将使用 OR 而不是通常的 AND 进行组合。

Example

<filter domain="[('state', '=', 'draft')]"/>
<filter domain="[('state', '=', 'done')]"/>

state 字段为 draftdone 的记录将被显示。

Example

<filter domain="[('state', '=', 'draft')]"/>
<separator/>
<filter domain="[('delay', '&lt;', 15)]"/>

需要翻译的内容是:

可能的渲染结构和表示

../../../_images/search_filter.svg
<search>
    <filter string="My Custom Name" domain="[('name', 'ilike', 'AAA')]"/>
    <filter string="My orders" domain="[('user_id', '=', uid)]"/>
    <filter string="Category" context="{'group_by': 'category_id'}"/>
</search>

separator: 分隔过滤器组

separator 元素用于在简单搜索视图中分隔 过滤器 组。对于更复杂的搜索视图,建议使用 group 元素。

<search>
    <FILTERS/>
    <separator/>
    <FILTERS/>
</search>

separator 元素不接受任何属性。

group: 用于分隔过滤器组

group 元素用于在杂乱的搜索视图中分隔 过滤器 组。在较简单的搜索视图中,可以用 分隔符 元素替代。

<search>
    <group expand="0" string="LABEL">
        <FILTERS/>
    </group>
</search>

group 元素不接受任何属性。

searchpanel:显示搜索面板

searchpanel 元素在多记录视图的左侧显示一个搜索面板。它允许基于给定字段快速过滤数据。

<search>
    <searchpanel>
        <FIELDS/>
    </searchpanel>
</search>

searchpanel 元素仅接受 field 子元素。

作为 searchpanel 元素的子元素使用的 field 元素可以具有以下属性:

name

用于筛选的字段名称。

Requirement

强制性的

类型

str

string

字段的标签。

Requirement

可选的

类型

str

默认

模型字段的 string 属性

select

字段的行为和显示。它可以有两个不同的值:

one

最多只能选择一个值。支持的字段类型为 many2oneselection

multi

可以选择多个值。支持的字段类型有 many2onemany2manyselection

Requirement

可选的

类型

str

默认

one

groups

以逗号分隔的用户组列表,元素将显示给这些用户组。不属于这些组中至少一个的用户将无法看到该元素。组名前可以加上负号 ! 操作符以排除这些组。

Example

<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
Requirement

可选的

类型

str

默认

''

icon

字段的图标。

Requirement

可选的

类型

str

默认

''

color

字段的颜色。

Requirement

可选的

类型

str

默认

''

field 元素设置了 select=one 属性时,它可以具有以下附加属性:

hierarchize

子类别是否应显示在其父类别下,或处于相同的层级水平。

Requirement

可选的

类型

bool

默认

True

Scope

Many2one 字段

field 元素设置了 select=multi 属性时,它可以具有以下附加属性:

enable_counters

是否计算并在非零时显示记录计数器。

小技巧

此属性旨在避免影响性能。解决性能问题的另一种方法是重写 search_panel_select_rangesearch_panel_select_multi_range 方法。

Requirement

可选的

类型

bool

默认

False

expand

是否应显示没有记录的类别和过滤器。

Requirement

可选的

类型

bool

默认

False

limit

为该字段获取的最大值数量。如果达到限制,搜索面板上不会显示任何值,而是显示错误消息。如果设置为 0,则获取所有值。

Requirement

可选的

类型

int

默认

200

domain

记录必须满足的条件。

Example

<searchpanel>
    <field name="department_id"/>
    <field name="manager_id" select="multi" domain="[('department_id', '=', department_id)]"/>
</searchpanel>
Requirement

可选的

类型

Python 表达式

默认

[]

groupby

用于分组值的字段名称。

Requirement

可选的

类型

str

默认

''

Scope

Many2oneMany2many 字段

搜索默认值

搜索字段和过滤器可以通过操作的 context 使用 search_default_name 键进行配置。对于字段,值必须是设置给字段的值。对于过滤器,它必须是一个布尔值或数字。

Example

使用 foo 作为字段,bar 作为过滤器,以下操作上下文将在 acro 上搜索 foo 并默认启用 bar

{
    'search_default_foo': 'acro',
    'search_default_bar': 1
}

可以使用一个介于1到99之间的数值来定义默认 groupby 过滤器的顺序。

Example

使用 foobar 这两个 groupby 过滤器时,以下操作上下文将首先启用 bar,然后启用 foo

{
    'search_default_foo': 2,
    'search_default_bar': 1
}

看板

看板视图用作 看板 可视化:它们将记录显示为“卡片”,介于 列表表单 视图之间。

记录可以按列分组,用于工作流可视化或操作(例如,任务或工作进度管理),也可以不分组(仅用于可视化记录)。

看板视图的根元素是 kanban

可能的渲染结构和表示

../../../_images/kanban.svg
<kanban>
    ...
</kanban>

注解

看板视图最多加载并显示十列。之后的任何列默认关闭,但仍可由用户打开。

根属性

可选属性可以添加到根元素 kanban 上以自定义视图。

string

视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该标题。

Requirement

可选的

类型

str

默认

''

create

禁用/启用视图上的记录创建。

Requirement

可选的

类型

bool

默认

True

edit

禁用/启用视图上的记录编辑。

Requirement

可选的

类型

bool

默认

True

delete

通过 操作 下拉菜单禁用/启用视图上的记录删除功能。

Requirement

可选的

类型

bool

默认

True

default_group_by

如果未通过操作或当前 搜索 指定分组,则默认按此字段对记录进行分组。

Requirement

可选的

类型

str

默认

''

default_order

一个以逗号分隔的字段名称列表,用于覆盖通过 _order 属性在模型上定义的排序。

要反转字段的排序顺序,在其后加上 desc,并用空格分隔。

Example

<list default_order="sequence,name desc">
    ...
</list>
Requirement

可选的

类型

str

默认

''

class

向视图的根 HTML 元素添加 HTML 类。

Requirement

可选的

类型

str

默认

''

examples

KanbanExamplesRegistry 中的键,用于在分组看板视图中创建新列时可以浏览的示例。

Requirement

可选的

类型

str

默认

''

group_create

是否显示 添加新列 栏。

Requirement

可选的

类型

bool

默认

True

group_delete

是否可以通过齿轮菜单删除列。

Requirement

可选的

类型

bool

默认

True

group_edit

是否可以通过齿轮菜单编辑列。

Requirement

可选的

类型

bool

默认

True

groups_draggable

列是否可以重新排序。

Requirement

可选的

类型

bool

默认

True

records_draggable

看板视图分组时,记录是否可拖动。

Requirement

可选的

类型

bool

默认

True

archivable

当模型上定义了 active 字段时,属于某列的记录是否可以归档和取消归档。

Requirement

可选的

类型

bool

默认

True

quick_create

是否可以在不切换到表单视图的情况下创建记录。

Requirement

可选的

类型

bool

默认

当看板视图按 many2one、selection、char 或 boolean 字段分组时为 True,否则为 False

quick_create_view

使用快速创建记录时打开的 form 视图的引用。

Requirement

可选的

类型

str

默认

''

on_create

点击 创建 时调用的自定义操作。

如果设置为 'quick_create',则使用快速创建记录。如果快速创建被禁用,则调用标准创建操作。

Requirement

可选的

类型

str

默认

''

can_open

默认情况下,点击看板卡片会在表单视图中打开相应的记录。通过将属性 can_open 设置为 False 可以禁用此行为。

Requirement

可选的

类型

bool

默认

True

highlight_color

用于为看板卡片左侧边框着色的整数字段名称。

Requirement

可选的

类型

str

sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

组件

看板视图接受以下子元素: 模板 , 字段 , 头部 , 进度条 .

templates: 定义卡片结构

templates 元素用于定义构成看板卡片的 QWeb 模板

为了清晰起见,卡片结构的定义可以拆分为多个模板,但必须至少定义一个根 card 模板。

可以定义一个额外的模板:menu。如果定义了该模板,它会在卡片右上角的垂直省略号()触发的下拉菜单中渲染。

模板是用 JavaScript QWeb 编写的。

<kanban>
   <templates>
      <t t-name="card">
         <field name="name"/>
      </t>
   </templates>
</kanban>

警告

这些是 QWeb 模板,而非 Owl 模板,意味着像 t-on-click 这样的指令不可用。

字段

在这些模板中,field 元素允许渲染一个字段。它可以具有以下属性:

name

要渲染的字段名称。

Requirement

强制性的

类型

str

widget

用于表示字段的小部件。所选的小部件可以改变字段的渲染方式和/或编辑方式。它指的是注册到 fields 注册表中的 Javascript 实现(一个 Owl 组件)。

Requirement

可选的

类型

str

默认情况下,字段节点会被替换为包含其格式化值的 span ,除非指定了 widget 属性,在这种情况下,它们的渲染和行为取决于相应的部件。 widget 属性可以有不同的值,包括:

handle

允许通过拖放重新排序记录,使用相应字段作为顺序。

kanban_color_picker

允许编辑颜色(整数)字段。与根属性 highlight_color 结合使用,可以编辑卡片的颜色。

请参阅 字段部分 以了解各种小部件及其选项。

渲染上下文

Kanban 模板通过 QWeb 引擎 渲染,它们拥有一个 渲染上下文,即模板中可用的一组变量,包含有用的信息和工具。以下是可用的变量:

record

一个包含视图中定义的所有字段的对象。每个字段都有两个属性:valueraw_value。前者根据当前用户参数格式化,而后者是原始值(例如,many2one 字段的 id)。此对象非常有用,例如,在 t-if 条件中使用字段值。对于显示目的,我们建议使用 <field> 标签。

Example

<kanban>
   <templates>
      <field name="is_company"/>
      <t t-name="card">
         <field name="name"/>
         <field t-if="!record.is_company.raw_value" name="parent_id">
      </t>
   </templates>
</kanban>
widget

一个包含 2 个键的对象,用于定义用户可用的操作:

  • editable: 如果用户可以编辑记录,则为 true;否则为 false;

  • deletable: 如果用户可以删除记录,则为 true,否则为 false。

这对于有条件地显示需要特定访问权限的元素非常有用。

Example

<kanban>
   <templates>
      <t t-name="card">
         <field name="name"/>
      </t>
      <t t-name="menu">
         <a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
      </t>
   </templates>
</kanban>
context

当前上下文传播自打开看板视图的操作,或在表单视图中嵌入看板视图的 one2many 或 many2many 字段。

read_only_mode

表示该视图为只读。

类型

bool

selection_mode

在移动环境中,选择 many2one 或 many2many 字段时是否打开看板视图。

类型

bool

luxon

luxon 对象,允许操作日期和日期时间字段值。

JSON

Javascript 的 JSON 命名空间对象包含一个 parse 方法,允许将 json 字段值解析为 Javascript 对象。

小部件

widget 元素允许在卡片内插入动态生成的(使用 Javascript)HTML。它有一个必需的 name 属性,指向注册到 view_widgets 注册表中的 Javascript 实现(一个 Owl 组件)。

参见 Widget 部分 以了解各种小部件及其选项。

布局

可以使用标准的 HTML 元素和 Bootstrap 工具类 轻松实现多种卡片布局。默认情况下,卡片是一个 flexbox 容器,其方向为 column

Example

<kanban>
   <templates>
      <t t-name="card">
         <field class="fw-bold fs-5" name="display_name"/>
         <field class="text-muted" name="parent_id"/>
         <field name="tag_ids" widget="many2many_tags"/>
      </t>
   </templates>
</kanban>

footer HTML 元素被设计为固定在卡片底部,并且作为一个具有 row 方向的 flexbox 容器,允许在同一行上轻松显示多个字段。

Example

<kanban>
   <templates>
      <t t-name="card">
         <field class="fw-bold fs-5" name="display_name"/>
         <field class="text-muted" name="parent_id"/>
         <field name="tag_ids" widget="many2many_tags"/>
         <footer>
            <field name="priority" widget="priority"/> <!-- bottom left corner -->
            <field class="ms-auto" name="activity_ids" widget="kanban_activity"/> <!-- bottom right corner -->
         </footer>
      </t>
   </templates>
</kanban>

要在卡片的一侧显示某些内容,如图像,可以使用 asidemain html 元素,并在卡片上添加 flex-row 类名。main 节点是一个 flexbox 容器,就像没有 aside 时的卡片一样。

Example

<kanban>
   <templates>
      <t t-name="card" class="flex-row">
         <aside>
            <field name="avatar_128" widget="image" alt="Avatar"/>
         </aside>
         <main class="ms-2">
            <field class="fw-bold fs-5" name="display_name"/>
            <field class="text-muted" name="parent_id"/>
            <field name="tag_ids" widget="many2many_tags"/>
            <footer>
               <field name="priority" widget="priority"/>
               <field class="ms-auto" name="activity_ids" widget="kanban_activity"/>
            </footer>
         </main>
      </t>
   </templates>
</kanban>

小技巧

aside 元素上设置的类名 o_kanban_aside_full 移除了内边距,使图像扩展到卡片的边缘。

field: 声明要获取的更多字段

field 元素也可以在 kanban templates 之外 使用。在这种情况下,它允许声明那些不在卡片中显示但仍需要获取的字段,例如因为它们的值在 t-if 条件中使用。

Example

<kanban>
   <templates>
      <field name="is_company"/>
      <t t-name="card">
         <field name="name"/>
         <field t-if="!record.is_company.raw_value" name="parent_id">
      </t>
   </templates>
</kanban>

header: 在控制面板中显示按钮

header 元素用于在控制面板中插入自定义按钮。

<kanban>
   <header>
      ...
   </header>
   ...
</kanban>

header 元素仅接受 button 子元素,类似于 列表视图的按钮 元素。

作为 header 元素的子元素使用的 button 元素可以具有以下附加属性:

display

按钮的显示模式。它有两种不同的值:

display

该按钮仅在选中某些记录时显示;其操作适用于选中的记录。

always

该按钮始终显示,即使未选择任何记录。

重要

只有 always 显示模式可用,因为目前尚无法在看板视图中选择记录。

Example

<header>
    <button name="toDoAlways" type="object" string="Always displayed" display="always"/>
    <button name="toDoSelection" type="object" string="Displayed if selection"/>
</header>
Requirement

可选的

类型

str

默认

display

progressbar:在列顶部显示进度条

progressbar 元素用于定义一个进度条,以在分组看板视图的看板列顶部显示。

<kanban>
    <progressbar field="FIELD_NAME"/>
    ...
</kanban>

progressbar 元素可以具有以下属性:

field

进度条子组所基于的字段名称。

Requirement

强制性的

类型

str

colors

进度条字段值到颜色值 mutedsuccesswarningdanger 的映射。

Requirement

强制性的

类型

JSON

sum_field

用于在进度条旁边显示总和的字段名称。如果未设置,则显示记录的总数。

Requirement

可选的

类型

str

默认

''

可能的渲染结构和表示

../../../_images/kanban_progressbar.svg
<kanban>
    <progressbar field="activity_state"
                 colors="{'planned': 'success', 'today': 'warning', 'overdue': 'danger'}"
                 sum_field="expected_revenue"/>
    <templates>
        ...
    </templates>
</kanban>

QWeb

QWeb 视图是视图的 arch 中的标准 QWeb模板 模板。它们没有特定的根元素。因为 QWeb 视图没有特定的根元素,所以必须明确指定它们的类型(不能从 arch 字段的根元素中推断出来)。

QWeb视图有两种用途:

  • 它们可以用作前端模板,在这种情况下,应该使用 template 作为快捷方式。

  • 它们可以被用作实际的qweb视图(在操作内打开),在这种情况下,它们应该被定义为具有显式 类型 (它不能被推断)和模型的常规视图。

qweb-as-view 相对于基本的 qweb-as-template 的主要增强功能包括:

  • qweb-as-view 对于带有 CSS 类 o_qweb_cp_buttons<nav> 元素有一个特殊情况:其内容应为按钮,并将被提取并移动到控制面板的按钮区域,<nav> 本身将被移除,这是针对控制面板视图尚未存在的一种变通方法

  • qweb-as-view 渲染会在标准 qweb 渲染上下文中添加几个项目:

    model

    绑定到 qweb 视图的模型

    domain

    搜索视图提供的域

    context

    搜索视图提供的上下文

    records

    一个对 model.search(domain) 的延迟代理,如果你只想遍历记录而不执行更复杂的操作(例如分组),可以使用它

  • qweb-as-view 还提供了额外的渲染钩子:

    • _qweb_prepare_context(view_id, domain) prepares the rendering context specific to qweb-as-view

    • qweb_render_view(view_id, domain) 是客户端调用的方法,将调用上下文准备方法,最终调用 env['ir.qweb'].render()

图表

图表视图用于可视化一组记录或记录组的聚合。其根元素为 <graph> ,可以使用以下属性:

type (optional)

one of bar (default), pie and line, the type of graph to use

stacked (optional)

仅用于 bar 图表。设置为 0 以防止组内的柱形图最初被堆叠。

disable_linking (optional)

将其设置为 1 以防止将图表上的点击重定向到列表视图

order (optional)

如果设置,x轴值将默认根据其测量值按给定顺序(ascdesc)排序。仅用于 barpie 图表。

string (optional)

重定向到列表视图时在面包屑中显示的字符串。

sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

图表视图中唯一允许的元素是 field ,它可以具有以下属性:

name (mandatory)

视图中要使用的字段名称。如果用于分组(而不是聚合),请使用此字段。

invisible (optional)

如果为真,则该字段既不会出现在活动度量中,也不会出现在可选择的度量中。

type (optional)

如果设置为 measure,该字段将被用作分组内的聚合值,而不是分组条件。它仅适用于具有该属性的最后一个字段,但对于具有字符串属性的其他字段也很有用(见下文)。

interval (optional)

在日期和日期时间字段上,按指定的间隔(dayweekmonthquarteryear)进行分组,而不是按特定的日期时间(固定到秒的精度)或日期(固定到天的精度)进行分组。默认值为 month

string (optional)

仅用于具有 type="measure" 的字段。在图表视图中显示字段的名称,覆盖字段的默认 Python 字符串属性。

度量值是从模型字段自动生成的;只使用可聚合字段。这些度量值也按字段字符串的字母顺序排序。

警告

图形视图聚合是在数据库内容上执行的,非存储函数字段不能在图形视图中使用。

在图形视图中,一个 field 可以有一个 widget 属性来指定其格式。该 widget 应该是一个字段格式化器,其中最有趣的是 float_timemonetary

<field name="working_hours_close" widget="float_time"/>

透视表

透视视图用于将聚合可视化为 透视表。其根元素是 <pivot>,可以使用以下属性:

disable_linking (optional)

将其设置为 1 以删除表格单元格与列表视图的链接。

display_quantity (optional)

将其设置为 1 以默认显示数量列。

default_order (optional)

在视图中使用的默认顺序(升序或降序)的度量名称。

<pivot default_order="foo asc">
   <field name="foo" type="measure"/>
</pivot>

在透视图中,唯一允许的元素是 field ,它可以具有以下属性:

name (mandatory)

视图中要使用的字段名称。如果用于分组(而不是聚合),请使用此字段。

string (optional)

将用于在数据透视表视图中显示字段的名称,覆盖字段的默认 Python 字符串属性。

type (optional)

指示该字段应该作为分组标准还是在组内作为聚合值使用。可能的值为:

row (default)

按指定字段分组,每个组都有自己的行。

col

创建列分组

measure

在分组内聚合的字段

interval

在日期和日期时间字段上,按指定的间隔(dayweekmonthquarteryear)进行分组,而不是按特定的日期时间(固定到秒的精度)或日期(固定到天的精度)进行分组。

invisible (optional)

如果为真,则该字段既不会出现在活动度量中,也不会出现在可选择的度量中(对于不适合聚合的字段非常有用,例如不同单位的字段,例如 € 和 $)。

sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

度量值是从模型字段自动生成的;只使用可聚合字段。这些度量值也按字段字符串的字母顺序排序。

警告

与图形视图一样,数据透视表在数据库内容上聚合数据,这意味着非存储函数字段不能在数据透视表视图中使用。

在透视视图中, field 可以有一个 widget 属性来指定其格式。该小部件应该是一个字段格式化程序,其中最有趣的是 datedatetimefloat_timemonetary

例如,可以将时间表透视图定义为:

<pivot string="Timesheet">
    <field name="employee_id" type="row"/>
    <field name="date" interval="month" type="col"/>
    <field name="unit_amount" type="measure" widget="float_time"/>
</pivot>

日历

日历视图将记录显示为每日、每周、每月或每年的事件。

注解

默认情况下,日历视图将以当前日期(今天)为中心。您可以将特定的初始日期传递给操作的上下文,以便将日历的初始焦点设置在围绕此日期的期间(参见 mode)(使用的上下文键为 initial_date

它们的根元素是 <calendar>。日历视图上可用的属性有:

字符串

string (default: '')

此视图标题仅在您打开一个没有名称且目标为 ‘new’(打开对话框)的操作时显示

创建

bool (default: True)

禁用/启用视图上的记录创建。

编辑

bool (default: True)

禁用/启用视图上的记录编辑。

删除

bool (default: True)

通过 操作 下拉菜单禁用/启用视图上的记录删除。

date_start (required)

记录中保存事件开始日期的字段名称

date_stop

如果提供了 date_stop ,则记录的字段名称将包含事件的结束日期,记录将可以通过拖放直接在日历中移动

date_delay

替代 date_stop,提供事件的持续时间而不是其结束日期(单位:天)

color

用于 颜色分段 的记录字段名称。在日历中,同一颜色分段的记录被分配相同的高亮颜色,颜色被半随机分配。在侧边栏中显示可见记录的display_name/avatar

form_view_id

在用户创建或编辑事件时打开的视图。请注意,如果未设置此属性,则日历视图将回退到当前操作中表单视图的ID(如果有)。

event_open_popup

如果选项 ‘event_open_popup’ 设置为 true,则日历视图将在 FormViewDialog 中打开事件(或记录)。否则,它将在新的表单视图中打开事件(使用 do_action)。

quick_create

在点击时启用快速事件创建:只要求用户提供 name``(可以通过 ``rec_name 控制保存该值的字段),然后尝试仅使用该值和点击的事件时间创建新事件。如果快速创建失败,则回退到完整的表单对话框

quick_create_view_id

当设置了属性 quick_create 并且用户创建事件而不是默认对话框时打开的视图。

create_name_field

记录的字段名称,保存记录的文本表示形式,用于通过“快速创建”机制创建记录时使用

all_day

记录中一个布尔字段的名称,指示相应的事件是否被标记为全天事件(持续时间无关紧要)

mode

加载日历时的默认显示模式。可能的属性有: day , week , month , year

scales

提供的比例尺的逗号分隔列表。默认情况下,所有比例尺都可用。有关可能的比例尺值,请参见模式。

create, delete

允许通过将相应的属性设置为 false 来在视图中禁用相应的操作

<field>

声明要聚合或在看板 逻辑 中使用的字段。如果字段仅在日历卡片中显示。

字段可以有额外的属性:

invisible

在卡片中隐藏该值,请使用“True”

avatar_field

仅适用于x2many字段,在卡片中显示头像而不是显示名称

write_modelwrite_fieldfilter_field

您可以添加筛选器并将结果保存在定义的模型中,筛选器将添加在侧边栏中。 filter_field 是可选的,允许您指定将保存筛选器状态的字段。

filterscolor

使用”True”将此字段添加到侧边栏的筛选器中。您可以指定一个 color 字段用于给复选框上色。

通用模型

Model._date_name = 'date'

field to use for default calendar view

活动

活动视图用于显示与记录相关的活动。数据以图表形式展示,记录构成行,活动类型构成列。每行的第一个单元格显示一个(可自定义,参见 templates,与 看板 非常相似)卡片,代表相应的记录。点击其他单元格时,会显示该记录同类型所有活动的详细描述。

警告

只有在安装了 mail 模块并且继承自 mail.activity.mixin 的模型中,才能使用活动视图。

活动视图的根元素是 <activity>,它接受以下属性:

string (mandatory)

一个描述视图的标题

视图元素的可能子元素有:

field

声明在活动 逻辑 中使用的字段。如果字段仅在活动视图中显示,不需要预先声明。

可能的属性有:

name (required)

要获取的字段的名称

templates

定义了 QWeb模板 模板。卡片定义可以分成多个模板以增加清晰度,但是活动视图 必须 定义至少一个根模板 activity-box,该模板将为每个记录渲染一次。

活动视图主要使用标准的 javascript qweb,并提供了以下上下文变量 (更多详情请参见 看板):

widget

当前的 ActivityRecord() 可以用来获取一些元信息。这些方法也可以直接在模板上下文中使用,不需要通过 widget 来访问。

record

一个对象,其属性是所有请求的字段。每个字段都有两个属性 valueraw_value

同期

Enterprise feature

群体视图用于显示和理解一些数据随时间变化的方式。例如,假设对于某个企业,客户可以订阅某些服务。然后,群体视图可以显示每个月的订阅总数,并研究客户离开服务的速率(流失率)。单击单元格时,群体视图将重定向您到一个新的操作,您将只看到单元格时间间隔内包含的记录;此操作包含列表视图和表单视图。

注解

默认情况下,同一列表和表单视图将在动作上定义。您可以将列表视图和表单视图传递给动作的上下文,以设置/覆盖将使用的视图(使用的上下文键为 form_view_idlist_view_id

例如,这里是一个非常简单的同期视图:

<cohort string="Subscription" date_start="date_start" date_stop="date" interval="month"/>

Cohort视图的根元素是<cohort>,它接受以下属性:

string (mandatory)

一个描述视图的标题

date_start (mandatory)

一个有效的日期或日期时间字段。该字段被视图理解为记录的开始日期。

date_stop (mandatory)

一个有效的日期或日期时间字段。该字段被视图理解为记录的结束日期。这是确定流失的字段。

disable_linking (optional)

设置为 1 以防止将队列单元格的点击重定向到列表视图。

mode (optional)

一个描述模式的字符串。它应该是’churn’或’retention’(默认)。Churn模式将从0%开始随着时间的推移而累积,而retention模式将从100%开始随着时间的推移而减少。

timeline (optional)

一个描述时间轴的字符串。它应该是’backward’或’forward’(默认)。前向时间轴将显示从date_start到date_stop的数据,而后向时间轴将显示从date_stop到date_start的数据(当date_start在未来/大于date_stop时)。

interval (optional)

描述时间间隔的字符串。它应该是 ‘day’,’week’,’month’(默认)或 ‘year’。

measure (optional)

可聚合的字段。该字段将用于计算每个单元格的值。如果未设置,则队列视图将计算出现次数。

<field> (optional)

允许指定特定字段以便从可用的度量中进行管理,其主要用途是隐藏可选度量中的字段:

name (mandatory)

在视图中使用的字段名称。

string (optional)

将在队列视图中显示该字段的名称,覆盖字段的默认 Python 字符串属性。

invisible (optional)

如果为真,该字段将不会出现在活动度量或可选度量中(适用于不适合聚合的字段,例如不同单位的字段,如€和$)。如果值是一个域,则根据当前行记录的上下文评估该域,如果为 True ,则相应的属性将设置在单元格上。

widget (optional)

字段显示的替代表示形式。

odoo.addons.base.models.ir_ui_view.sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

表格

Enterprise feature

限制

此视图正在进行中,可能需要扩展或更改。

  • 只有 date 列字段已经测试过, selectionmany2one 名义上已经实现和支持,但尚未测试, datetime 根本没有实现。

  • 列单元格几乎不可配置且必须为数字

  • 单元格调整默认情况下被禁用,必须配置为启用

  • create, editdelete ACL 元数据不会自动设置在视图根上,因为在 fields_view_get 后处理中存在限制(有一个固定的显式列表来获取这些属性的视图类型)

模式

网格视图在此模块中具有自己的架构和额外的验证。视图架构如下:

<grid> (1)

架构根元素

  • 必填的 string 属性

  • 可选的 createeditdelete 属性

  • 可选的 adjustmentadjust_name 属性

    adjustment 可以是 objectaction,用于指示单元格的调整应通过方法调用还是操作执行来完成。adjust_name 分别提供方法名称和操作 ID。

    在这两种情况下,调整参数都作为 grid_adjust 上下文成员提供,在 object 情况下,参数也作为位置函数参数提供(紧挨着一个空的 id 列表):

    row_domain

    匹配已调整单元格整行的域

    column_field

    调整单元格的列名称

    column_value

    已调整单元格的列的值

    cell_field

    已调整单元格的度量字段

    change

    单元格旧值和调整后值之间的差异可能为正或负

  • 可选的 hide_line_totalhide_column_total 属性

    hide_line_total

    设置为 true 以隐藏总行(默认为 false)

    hide_column_total

    设置为 true 以隐藏总计列(默认为 false)

  • 可选的 barchart_total 属性

    barchart_total

    设置为 true 以在网格底部显示基于列总计的条形图(默认为false)。

  • 可选的 create_inlinedisplay_empty 属性

    create_inline

    设置为 true 以在网格底部显示一个额外的行,其中包含一个 添加一行 按钮(默认为 false)。当此选项设置为 true 时,控制面板中的 添加一行 按钮将被隐藏。当没有可用数据且未设置 display_empty 时(即显示帮助内容时),控制面板中的 添加一行 按钮将显示,以便用户创建第一条记录。

    display_empty

    设置为 true 以在没有数据时继续显示网格(默认为false)。当您希望用户能够跟踪当前时间段(因为日期显示在列标题中)时,这可能很有用。提醒一下,当没有数据存在且未设置此属性时,将显示帮助内容而不是网格。

<button> (0+)

在视图标题中显示的常规Odoo操作按钮

  • 必填的 string 属性(按钮标签)

  • 必填的 type 属性,可以是 objectaction

    注解

    不支持工作流按钮

  • 必填的 name 属性,可以是要调用的方法的名称,也可以是要执行的操作的 ID

  • 可选的 context

服务器回调提供了视图中显示的所有记录ID,无论是传递给方法的ID(object 按钮)还是上下文的 active_ids``(``action 按钮)

<field type="row"> (1+)

行分组字段,如果有的话,将被搜索视图的 groupby 过滤器替换。

在视图中, row 字段的顺序决定了它们的分组深度:如果第一个字段是 school ,第二个字段是 age ,那么记录将首先按 school 分组,然后在每个学校内按 age 分组。

<field type="col"> (1)

列分组字段。

col字段可以包含0个或多个 <range> 元素,用于指定可自定义的列范围。 range 元素具有以下强制属性

name

可以通过 grid_range 上下文值来覆盖默认范围(默认情况下为第一个)

string

范围按钮的标签(用户可见)

span

在视图中一次显示的所有列的跨度的符号名称,可能会触发分页。

对于 date 字段,有效的时间跨度目前有 weekmonth

step

前一列和后一列之间的步骤的符号名称

对于 date 字段,目前唯一有效的跨度是 day

<field type="measure"> (1)

单元格字段,自动累计(通过 read_group)。

测量字段可以使用 widget 属性来自定义其显示。

服务器交互

除了可选按钮外,网格视图目前调用两个方法:

  • read_grid (provided on all models by the module) returns almost the entirety of the grid’s content as a dict:

    • 行标题是一个带有以下键的字典列表:

      values (required)

      这映射到一个字典,每个 row 字段对应一个键,其值 始终[value, label] 的形式。

      domain (required)

      在单元格调整期间需要复制记录时,此行源记录的域

    • 列标题是一个至少包含一个键的字典列表:

      values (required)

      查看行标题值

      domain (required)

      查看列域值

      current (optional)

      布尔值,标记/突出显示一列

    • 将网格数据作为单元格字典的列表(行的列表)的列表返回,每个单元格字典都具有以下键:

      value

      与单元格相关联的数值

      domain

      匹配单元格记录的域(应被视为不透明)

      size

      单元格中分组的记录数

      readonly (optional)

      一个布尔值,指示此特定单元格不应该在客户端进行编辑

      classes (optional)

      一个字符串列表,包含要添加到单元格容器中(在单元格的 TD 和可编辑元素之间)的类。

      在这个列表和基类(以 o_grid_cell_ 为前缀)之间发生冲突时,将忽略此列表中的类。

      请注意,网格数据是 密集的 ,如果查询数据库时没有匹配到任何组与单元格匹配,则会生成一个带有默认值的”空”单元格,以满足必需键。

    • prevnext 可以是 falsy(无分页)或者是一个上下文项,用于合并到视图自身的上下文中,以便于 read_grid 读取上一页或下一页,应该假设它是不透明的

  • read_grid_domain(field, range)``(由模块在所有模型上提供)返回与当前配置的网格“范围”匹配的域。这也是 ``read_grid 在内部完成的,但在某些情况下,独立调用它可能有用或必要,以便与单独的例如 search_countread_group 一起使用。

  • adjust_grid, for which there currently isn’t a blanket implementation and whose semantics are likely to evolve with time and use cases

服务器钩子

read_grid calls a number of hooks allowing the customisation of its operations from within without having to override the entire method:

_grid_format_cell(group, cell_field)

将 read_group(按组分组)的输出转换为上述格式的单元格(作为“网格数据”的一部分)

_grid_make_empty_cell(row_domain, column_domain, view_domain)

生成一个空的单元格版本(如果没有相应的组)

_grid_column_info(name, range)

基于列类型生成 ColumnMetadata 对象,存储值,可以直接返回(作为 read_grid 的一部分)或用于查询和将 read_group 重新格式化为 read_grid

grouping

用于列的实际分组字段/查询

domain

如果列字段进行分页,则在 read_group 中应用的域,可以是空列表

prevnext

在当前页面之前和之后,将被发送到 read_grid 的上下文段。如果为 False,则禁用该方向的分页

values

在“当前页面”上显示的列值,每个值都是一个带有以下键的字典:

values

将字段名称映射到整个列的值的字典,通常只有 name -> 值

domain

匹配此特定列的域

is_current

True 如果当前列应在网格中特别突出显示,否则为 False

format

如何将该列/类型的值从 read_group 格式转换为 read_grid 格式(与 ColumnInfo 中的 values 匹配)

ACL

  • 如果视图不可编辑,则单个单元格也不可编辑

  • 如果视图不可创建,则不会显示 添加一行 按钮(当前它会创建一个新的空记录)

上下文键

grid_range

选择默认使用哪个范围,如果视图有多个范围

grid_anchor

如果适用,将用作列范围的默认锚点,而不是 read_grid 定义的默认值。

对于日期字段,计算初始跨度的参考日期。默认日期锚定为“今天”(用户所在时区)

甘特图

Enterprise feature

甘特图视图适当地显示甘特图(用于调度)。

gantt 视图的根元素是 <gantt/>,它没有子元素,但可以使用以下属性:

字符串

string (default: '')

此视图标题仅在您打开一个没有名称且目标为 ‘new’(打开对话框)的操作时显示

创建

bool (default: True)

禁用/启用视图上的记录创建。

编辑

bool (default: True)

禁用/启用视图上的记录编辑。

删除

bool (default: True)

通过 操作 下拉菜单禁用/启用视图上的记录删除。

date_start (required)

每条记录提供事件开始日期时间的字段名称。

date_stop (required)

为每个记录提供事件结束时间的字段名称。

dependency_field

提供两个记录之间依赖关系的 many2many 字段的名称。如果B依赖于A,则 dependency_field 是允许从B获取A的字段。这个字段和 dependency_inverted_field 字段都用于绘制依赖箭头,以便调整它们的时间表。

dependency_inverted_field (如果提供了 dependency_field 则为必填项)

提供反向依赖关系的 many2many 字段的名称比 dependency_field 更倾向于。如果B依赖于A, dependency_inverted_field 是允许从A获取B的字段。

color

用于根据其值着色药丸的字段名称

decoration-{$name}

python 表达式 其计算结果为布尔值

允许根据相应记录的属性更改单元格文本的样式。

{$name} 可以是以下 bootstrap contextual color (danger, info, secondary, successwarning)。

根据相应记录的属性,定义类似于行文本的记录的条件显示。

值是Python表达式。对于每个记录,表达式将使用记录的属性作为上下文值进行评估,如果为 true ,则将应用相应的样式到行中。以下是上下文中其他可用的值:

  • uid: the id of the current user,

  • today:当前本地日期,格式为 YYYY-MM-DD 的字符串,

  • now:与 today 相同,但增加了当前时间。该值的格式为 YYYY-MM-DD hh:mm:ss

<gantt decoration-info="state == 'draft'"
      decoration-danger="state == 'help_needed'"
      decoration-bf="state == 'busy'">
  ...
</gantt>
default_group_by

按字段分组任务的字段名称

disable_drag_drop

如果设置为 true,则甘特图视图将不支持拖放操作

consolidation

在记录单元格中显示合并值的字段名称

consolidation_max

将“group by”字段作为键,最大合并值达到显示红色单元格之前的字典(例如 {"user_id": 100}

consolidation_exclude

描述任务是否需要从合并中排除的字段名称,如果设置为true,则在合并行中显示带条纹的区域

create, cell_create, edit, delete, plan

允许通过在视图中将相应的属性设置为 false禁用 相应的操作(默认值:true)。

  • create: 如果启用,控制面板中将提供一个 添加 按钮来创建记录。

  • cell_create:如果启用且 create 也启用,当悬停在时间槽单元格上时,将显示一个 + 按钮,用于在该槽上创建新记录。

  • edit: If enabled, the opened records will be in edit mode (thus editable).

  • plan:如果启用且 edit 也启用,时间槽上将显示一个“放大镜”按钮,用于将未分配的记录计划到该时间槽中。

Example

当您不想在甘特视图上创建记录,并且模型需要开始和结束日期时,应禁用计划功能,因为永远找不到记录。

offset

根据规模,添加到今天以计算默认周期的单位数。例如:在默认规模为周的情况下,偏移量为+1将打开下周的甘特图视图,在默认规模为月的情况下,偏移量为-2将打开2个月前的甘特图视图。

progress

记录事件完成百分比的字段名称,介于0和100之间

string

甘特图视图的标题

precision

JSON 对象,指定每个刻度中药丸的捕捉精度。

可用的刻度值为 day (默认值: hour ):

  • hour: records times snap to full hours (ex: 7:12 becomes 8:00)

  • hour:half: records times snap to half hours (ex: 7:12 becomes 7:30)

  • hour:quarter: records times snap to half hours (ex: 7:12 becomes 7:15)

Possible values for scale week are (default: day:half):

  • day: records times snap to full days (ex: 7:28 AM becomes 11:59:59 PM of the previous day, 10:32 PM becomes 12:00 PM of the current day)

  • day:half: records times snap to half hours (ex: 7:28 AM becomes 12:00 PM)

可用的刻度值为 month (默认值: day:half ):

  • day: records times snap to full days (ex: 7:28 AM becomes 11:59:59 PM of the previous day, 10:32 PM becomes 12:00 PM of the current day)

  • day:half: records times snap to half hours (ex: 7:28 AM becomes 12:00 PM)

Scale year always snap to full day.

精度属性的示例: {"day": "hour:quarter", "week": "day:half", "month": "day"}

total_row

布尔值,用于控制是否显示包含记录总数的行。(默认值: false

``collapse_first_level`

布尔值,用于控制是否可以折叠每一行,如果按一个字段分组。(默认值: false ,当按两个字段分组时开始折叠)

display_unavailability

boolean 用于标记模型的 gantt_unavailability 函数返回的日期在甘特图视图中是否可用。记录仍然可以在其中安排,但它们的不可用性会在视觉上显示出来。(默认值: false

`default_scale`

渲染视图时的默认比例。可能的值为(默认值: month ):

  • day

  • week

  • month

  • year

scales

逗号分隔的允许此视图的比例列表。默认情况下,允许所有比例。要在此列表中使用的可能比例值,请参见 default_scale

templates

定义了 QWeb模板 模板 gantt-popover,当用户悬停在甘特图视图中的记录之一时使用。

gantt视图主要使用标准的 javascript qweb 并提供以下上下文变量:

widget

当前的 GanttRow() 可用于获取一些元信息。getColor 方法用于将颜色转换为整数,也可以直接在模板上下文中使用,而无需使用 widget

on_create

如果在视图上点击添加按钮时指定了此参数,则不会打开通用对话框,而是启动一个客户端操作。此参数应该包含操作的xmlid(例如: on_create="%(my_module.my_wizard)d"

form_view_id

在用户创建或编辑记录时打开的视图。请注意,如果未设置此属性,则甘特图视图将回退到当前操作中表单视图的ID(如果有)。

dynamic_range

如果设置为 true,则甘特图视图将从第一条记录开始,而不是从年/月/日的开始处开始。

pill_label

如果设置为true,则在将刻度设置为周或月时,时间将显示在药丸标签中。 (例如 7:00 AM - 11:00 AM (4h) - DST Task 1)

thumbnails

如果组是关系字段,这将允许在组名旁边显示缩略图。这需要一个Python字典,其键是活动模型上字段的名称。值是相关模型上持有缩略图的字段的名称。

例如:任务有一个字段 user_id,它引用了 res.users。res.users 模型有一个字段 image,它保存了头像,那么:

<gantt
   date_start="date_start"
   date_stop="date_stop"
   thumbnails="{'user_id': 'image_128'}"
 >
 </gantt>

将按用户ID分组时,显示用户头像在其名称旁边。

odoo.addons.base.models.ir_ui_view.sample

如果当前模型未找到任何记录,是否应使用一组示例记录填充视图。

这些假记录针对某些字段名称/模型具有启发式规则。例如,模型 res.users 上的字段 display_name 将填充示例人名,而 email 字段将采用 firstname.lastname@sample.demo 的形式。

用户无法与这些数据进行交互,一旦执行了操作(记录创建、列添加等),这些数据将被丢弃。

Requirement

可选的

类型

bool

默认

False

地图

Enterprise feature

此视图能够在地图上显示记录和它们之间的路线。记录由图钉表示。它还允许在与记录图钉相关联的弹出窗口中可视化模型中的字段。

注解

应用视图的模型应该包含一个 res.partner many2one,因为视图依赖于 res.partner 的地址和坐标字段来定位记录。

API

视图使用位置数据平台的API来获取瓦片(地图的背景),进行地理转发(将地址转换为一组坐标)和获取路线。视图实现了两个API,OpenStreetMap和MapBox。默认情况下使用OpenStreetMap,能够获取 瓦片 和进行 地理转发。该API不需要令牌。只要在常规设置中提供了有效的 MapBox 令牌,视图就会切换到MapBox API。该API更快,并允许计算路线。可以通过 注册 MapBox 来获取令牌。

结构组件

视图的根元素是 <map>。它可以具有以下属性:

res_partner

包含 res.partner 的 many2one 字段。如果未提供,则视图将创建一个空地图。

default_order

如果提供了字段,则视图将覆盖模型的默认排序。字段必须是应用视图的模型的一部分,而不是来自 res.partner

routing

如果为 1 ,则显示记录之间的路线。视图需要有效的 MapBox 令牌和至少两个已定位的记录(即记录具有 res.partner many2one 并且合作伙伴具有地址或有效坐标)。

hide_name

如果 1 隐藏名称在弹出窗口的针(默认: 0 )。

hide_address

如果 1 隐藏地址从弹出窗口的图钉 (默认: 0)。

hide_title

如果 1 从固定列表中隐藏标题(默认值: 0 )。

panel_title

在固定列表中显示的标题字符串。如果未提供,则标题为操作的名称或如果视图不在操作中,则为“Items”。

limit

要获取的最大记录数(默认值:80)。它必须是一个正整数。

The <map> element can contain multiple <field> elements. Each <field> element is interpreted as a line in the pin’s popup. The field’s attributes are the following:

name

要显示的字段。

string

字段内容前要显示的字符串。它可以用作描述。

例如,这里是一张地图:
<map res_partner="partner_id" default_order="date_begin" routing="1" hide_name="1">
    <field name="partner_id" string="Customer Name"/>
</map>