视图架构

通用架构

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

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

注解

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

另请参见

查看记录

Python 表达式

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

  • 当前视图中所有字段的名称,包含当前记录的值,但不包括 列表视图 中的 column_invisible;关系型字段以ID列表的形式给出;

  • 当前记录的 ID;

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

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

  • 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`(打开对话框)的动作时显示。

要求

可选

类型

字符串

默认

''

create

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

要求

可选

类型

布尔值

默认

True

edit

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

要求

可选

类型

布尔值

默认

True

duplicate

通过视图中的 动作 下拉菜单禁用/启用记录复制。

要求

可选

类型

布尔值

默认

True

delete

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

要求

可选

类型

布尔值

默认

True

js_class

Web客户端将实例化的JavaScript组件名称,而不是表单视图。

要求

可选

类型

字符串

默认

''

disable_autofocus

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

要求

可选

类型

布尔值

默认

False

语义组件

语义组件与 Odoo 系统相关联,并允许与其进行交互。

表单视图接受以下子语义组件:字段标签按钮引用附件

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

字段: 显示字段值

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

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

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

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

name

要渲染的字段名称。

要求

必填

类型

字符串

widget

该字段使用的组件。所选组件可以改变字段的显示方式和/或编辑方式。它指的是注册到 fields 注册表中的 JavaScript 实现(一个 Owl 组件)。

要求

可选

类型

字符串

id

节点 ID。当视图中存在同一字段的多个实例时非常有用(参见 label: 显示字段标签)。

要求

可选

类型

字符串

默认

字段名称

string

字段的标签。

要求

可选

类型

字符串

默认

模型字段的 string 属性

help

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

要求

可选

类型

字符串

默认

''

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}"/>
要求

可选

类型

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]"/>
要求

可选

类型

Python 表达式

默认

False

required

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

Example

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

可选

类型

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>
要求

可选

类型

Python 表达式

默认

False

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

domain

显示现有记录以供选择时要应用的过滤器,为一个 Python 表达式,该表达式会求值为 领域

Example

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

可选

类型

Python 表达式

默认

[]

作用域

关系字段

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,
  }"/>
要求

可选

类型

Python 表达式

默认

{}

作用域

关系字段

nolabel

字段标签是否应隐藏。

要求

可选

类型

布尔值

默认

False

作用域

属于 group 元素的直接子元素的字段

placeholder

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

要求

可选

类型

字符串

默认

''

mode

字段关联记录的显示模式(视图类型)的逗号分隔列表。允许的模式包括:列表表单看板图表

要求

可选

类型

字符串

默认

列表

作用域

One2manyMany2many 字段

class

生成元素上要设置的 HTML 类

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

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

  • oe_leftoe_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>
要求

可选

类型

字符串

默认

''

filename

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

要求

可选

类型

字符串

默认

''

作用域

Binary 字段

password

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

要求

可选

类型

布尔值

默认

False

作用域

Char 字段

kanban_view_ref

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

要求

可选

类型

字符串

默认

''

作用域

关系字段

default_focus

字段在视图打开时是否获得焦点。只能应用于视图中的一个字段。

要求

可选

类型

布尔值

默认

False

注解

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

Example

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

label: 显示字段标签

当一个 字段 组件没有直接放置在 用户组 内部时,或者当其 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(在 字段 上设置的 id 属性)。

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

要求

必填

类型

字符串

string

要显示的标签。

要求

可选

类型

字符串

默认

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

class

生成元素上要设置的 HTML 类

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

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

  • oe_leftoe_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>
要求

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

按钮: 显示动作按钮

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

按钮 元素可以具有以下属性:

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"/>
要求

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

类型

字符串

name

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

要求

可选

类型

字符串

默认

''

string

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

Example

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

可选

类型

字符串

默认

''

icon

按钮要使用的图标。有关图标列表,请参见 图标

Example

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

可选

类型

字符串

默认

''

help

悬停鼠标光标时显示的提示消息。

Example

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

可选

类型

字符串

默认

''

context

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

Example

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

可选

类型

Python 表达式

默认

{}

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

class

生成元素上要设置的 HTML 类

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

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

  • oe_leftoe_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>
要求

可选

类型

字符串

默认

''

special

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

save

保存记录并关闭对话框。

cancel

不保存直接关闭对话框。

Example

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

可选

类型

字符串

默认

''

confirm

执行按钮动作前要显示的确认消息(并让用户进行确认)。

Example

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

可选

类型

字符串

默认

''

data-hotkey

该按钮绑定的快捷键(keyboard_shortcut类似于访问键)。当同时按下 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"/>
要求

可选

类型

字符串

默认

''

聊天小部件

chatter widget 是用于沟通和记录的工具,允许从一条记录(任务、订单、发票、活动、笔记等)直接向同事和客户发送邮件。

当模型继承 mail.thread 混入类时,会通过 div 元素添加 oe_chatter 类。

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: 定义列布局

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

字段 元素如果作为组的直接子元素,默认会显示 label,且标签和字段本身的 colspan 均为 1

子项按水平方向排列(它们会先尝试填满下一列,然后再换行)。

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

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

string

该用户组显示的标题。

要求

可选

类型

字符串

默认

''

col

一个 group 中的列数。

要求

可选

类型

int

默认

2

colspan

子元素占用的列数。

要求

可选

类型

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>
要求

可选

类型

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>
    <sheet>
        ...
    </sheet>
</form>

选项卡 & 页面: 添加选项卡式区域

notebook 元素定义了一个选项卡区域。每个选项卡通过 page 子元素进行定义。

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

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

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

string

标签页的标题。

要求

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

可能的渲染结构和表示方式

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

newline: 开始新的用户组行

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

<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

作为章节标题的标题。

要求

可选

类型

字符串

默认

''

可能的渲染结构和表示方式

../../../_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 元素结合,可在 sheet 本身上方提供一个全宽区域,通常用于显示工作流 按钮 元素以及以状态小部件形式呈现的 字段 元素。

<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_boxdiv 元素创建。

<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 元素创建。

<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:声明应用

app 元素用于在设置视图中声明应用。它会在视图侧边栏中创建一个带有应用图标的操作项。它在搜索时也起到分隔符的作用。

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

应用 元素可以具有以下属性:

string

应用的名称。

要求

必填

类型

字符串

name

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

要求

必填

类型

字符串

logo

该 Logo 的 相对路径

要求

可选

类型

路径

默认

通过 name 属性计算的路径:/name/static/description/icon.png

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

block: 声明一组设置

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

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

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

title

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

要求

可选

类型

字符串

默认

''

help

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

要求

可选

类型

字符串

默认

''

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

设置: 声明设置

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

设置中的第一个 字段 元素用作主字段。如果该字段是布尔类型,则放置在左侧面板;否则,放置在右侧面板的顶部。如果未定义 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",将渲染一种特殊的设置。此设置用于修改其他设置的作用范围。例如,在网站应用中,此设置用于指示其他设置适用于哪个网站。标题设置在视觉上表现为屏幕顶部的横幅。

要求

可选

类型

字符串

默认

''

string

作为设置标签使用的文本。

要求

可选

类型

字符串

默认

第一个字段的标签

title

作为提示信息使用的文本。

要求

可选

类型

字符串

默认

''

help

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

要求

可选

类型

字符串

默认

''

company_dependent

是否为公司专用设置。如果启用,在设置标签旁边会显示一个图标。

它仅接受值 '1'

要求

可选

类型

字符串

默认

''

documentation

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

要求

可选

类型

路径_

默认

''

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

Python 表达式

默认

False

列表

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

可能的渲染结构和表示方式

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

根属性

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

string

视图标题。仅在打开一个没有名称且目标为 `new`(打开对话框)的动作时显示。

要求

可选

类型

字符串

默认

''

create

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

要求

可选

类型

布尔值

默认

True

edit

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

要求

可选

类型

布尔值

默认

True

delete

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

要求

可选

类型

布尔值

默认

True

import

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

要求

可选

类型

布尔值

默认

True

export_xlsx

禁用/启用视图中的记录导出功能。

要求

可选

类型

布尔值

默认

True

editable

在视图中直接编辑记录,并允许从列表的一行创建新记录。它有两种不同的值:

top

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

bottom

新记录从列表底部创建。

内联 表单 视图的架构来源于列表视图。表单视图上的大多数字段和按钮的有效属性也适用于列表视图,尽管如果列表视图不可编辑,则这些属性可能没有实际意义。

重要

此行为在 edit 属性设置为 False 时被禁用。

要求

可选

类型

字符串

默认

''

multi_edit

启用多条目编辑功能,该功能允许一次性将多个记录的字段更新为相同值。

它仅接受值 '1'

要求

可选

类型

字符串

默认

''

open_form_view

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

如果视图不可编辑,则此设置无任何效果。

要求

可选

类型

布尔值

默认

False

default_group_by

如果通过动作或当前搜索(参见 搜索)未指定分组,则应默认根据该字段对记录进行分组。

要求

可选

类型

字符串

默认

''

default_order

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

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

Example

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

可选

类型

字符串

默认

''

decoration-<style>

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

<style> 必须替换为以下之一:`bf`(粗体)、`it`(斜体)、`info`(信息)、`warning`(警告)、`danger`(危险)、`muted`(灰度)、`primary`(主要)和 `success`(成功)。

Example

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

可选

类型

Python 表达式

默认

False

limit

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

要求

可选

类型

int

默认

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

groups_limit

当列表视图按组分页时,每页的默认组数。必须为严格正数。

要求

可选

类型

int

默认

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

expand

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

警告

这可能会比较慢,具体取决于分组的数量。

要求

可选

类型

布尔值

默认

False

sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

False

组件

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

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

字段: 显示字段值

field 元素将当前所有记录的单个字段渲染为一列(可能允许进行编辑)。

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

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

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

name

要渲染的字段名称。

要求

必填

类型

字符串

widget

该字段使用的组件。所选组件可以改变字段的显示方式和/或编辑方式。它指的是注册到 fields 注册表中的 JavaScript 实现(一个 Owl 组件)。

要求

可选

类型

字符串

string

字段的标签。

要求

可选

类型

字符串

默认

模型字段的 string 属性

optional

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

它可以具有两个不同的值:

show

该字段默认显示。

hide

该字段默认是隐藏的。

Example

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

可选

类型

字符串

readonly

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

Example

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

可选

类型

Python 表达式

默认

False

required

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

Example

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

可选

类型

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>
要求

可选

类型

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')"/>
要求

可选

类型

Python 表达式

默认

False

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

decoration-<style>

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

<style> 必须替换为以下之一:`bf`(粗体)、`it`(斜体)、`info`(信息)、`warning`(警告)、`danger`(危险)、`muted`(灰度)、`primary`(主要)和 `success`(成功)。

Example

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

可选

类型

Python 表达式

默认

False

sum, avg

列底部要显示的汇总。该汇总仅对当前显示的记录进行计算。汇总操作必须与相应字段的 aggregator 匹配。

Example

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

可选

类型

字符串

默认

''

width

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

要求

可选

类型

字符串

默认

''

nolabel

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

它仅接受值 '1'

要求

可选

类型

字符串

默认

''

注解

当列表视图按某个字段进行分组时,数值型字段会在每个分组中进行汇总并显示。此外,如果某个分组中的记录过多,会在该分组行的右侧显示分页控件。因此,在列表视图可能被分组的情况下,将数值型字段放在最后一列是一种不好的做法。然而,在表单视图中的 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>

按钮: 显示动作按钮

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

按钮 元素可以具有以下属性:

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"/>
要求

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

类型

字符串

name

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

要求

可选

类型

字符串

默认

''

string

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

Example

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

可选

类型

字符串

默认

''

icon

按钮要使用的图标。有关图标列表,请参见 图标

Example

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

可选

类型

字符串

默认

''

help

悬停鼠标光标时显示的提示消息。

Example

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

可选

类型

字符串

默认

''

context

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

Example

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

可选

类型

Python 表达式

默认

{}

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

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')"/>
要求

可选

类型

Python 表达式

默认

False

class

生成元素上要设置的 HTML 类

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

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

  • oe_leftoe_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>
要求

可选

类型

字符串

默认

''

可能的渲染结构和表示方式

../../../_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: 定义分组标题

groupby 元素用于在对 Many2one 字段进行分组时,定义带有 按钮 元素的分组标题。它还接受 字段 元素,可用于修饰器。因此,这些字段应位于 Many2one 的关联模型中。这些额外的字段会以批量方式获取。

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

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

name

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

一个特殊的 按钮 元素,设置 type="edit",可以定义为打开 Many2one 字段的表单视图。

要求

必填

类型

字符串

可能的渲染结构和表示方式

../../../_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>
要求

可选

类型

字符串

默认

''

可能的渲染结构和表示方式

../../../_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>

控制创建: 添加内联创建按钮

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

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

control 元素不接受任何属性。

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

string

按钮的文本。

要求

必填

类型

字符串

context

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

要求

可选

类型

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 元素,则会覆盖默认的 添加一行 按钮。

组件

搜索视图接受以下子元素:字段筛选器分隔符用户组搜索面板

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

field: 根据字段值进行筛选

field 元素用于定义带有用户提供的值的域或上下文。当生成搜索域时,字段域之间以及与过滤器一起使用 AND 运算符进行连接。

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

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

name

要筛选的字段名称。

要求

必填

类型

字符串

string

字段的标签。

要求

可选

类型

字符串

默认

模型字段的 string 属性

operator

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

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

要求

可选

类型

字符串

默认

=

filter_domain

该字段使用的搜索条件,为一个 Python 表达式,其结果为 条件

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

如果同时提供了 operatorfilter_domain 属性,则 filter_domain 具有优先权。

要求

可选

类型

Python 表达式

默认

[]

context

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

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

要求

可选

类型

Python 表达式

默认

{}

domain

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

要求

可选

类型

Python 表达式

默认

[]

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

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>
要求

可选

类型

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 元素用于创建可切换的预定义筛选器,这些筛选器可以在搜索视图中使用。它允许向搜索上下文 传递给数据视图用于搜索/筛选的上下文 添加数据,或者在搜索筛选器中追加新的部分。

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

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

name

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

要求

必填

类型

字符串

string

筛选器的标签。

要求

必填

类型

字符串

help

悬停在筛选器上时显示的提示信息。

要求

可选

类型

字符串

默认

''

domain

要附加到动作的领域以作为搜索领域的部分的领域。

要求

可选

类型

Python 表达式

默认

[]

date

要筛选的 datedatetime 字段的名称。

当使用此属性时,它会在 过滤器 菜单的子菜单中创建一组可用的筛选条件。可用的筛选条件是基于时间的,但并非动态的,因为它们的域(domain)是在控制面板实例化时进行评估的。

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>

请注意,以这种方式定义的所有自定义筛选条件彼此之间是互斥的,并且也与其他子筛选条件互斥。

要求

可选

类型

字符串

默认

''

start_month

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

Example

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

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

要求

可选

类型

int

默认

-2

作用域

带有非空 date 属性的筛选条件

end_month

在日期筛选器的下拉菜单中显示的最新月份,相对于当前月份的偏移量。

Example

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

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

要求

可选

类型

int

默认

0

作用域

带有非空 date 属性的筛选条件

start_year

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

Example

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

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

要求

可选

类型

int

默认

-2

作用域

带有非空 date 属性的筛选条件

end_year

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

Example

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

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

要求

可选

类型

int

默认

0

作用域

带有非空 date 属性的筛选条件

default_period

时间筛选器的默认期间(带有 date 属性)。它必须是有效的筛选器 ID,或者用逗号分隔的有效筛选器 ID 列表。

有效的筛选器 ID 包括以下内容:

  • 第一季度, 第二季度, 第三季度第四季度

  • 其中一个为 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>
要求

可选

类型

字符串

默认

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

作用域

带有非空 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>
要求

可选

类型

Python 表达式

默认

False

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

context

动作的领域中合并的上下文,用于生成搜索领域

上下文键 group_by 设置为字段值时,可用于定义 按什么分组 菜单中可用的分组。当字段类型为 datedatetime 时,筛选器会生成一个 按什么分组 菜单的子菜单,其中包含以下时间段选项:季度。当该筛选器是视图初始化时默认激活的筛选器集合的一部分时,默认按月份进行分组。可以通过使用语法 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

要求

可选

类型

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)]"/>

状态字段为草稿且延迟字段低于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 元素用于在简单搜索视图中分隔 筛选器 的组。对于更复杂的搜索视图,建议使用 用户组 元素。

<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

要筛选的字段名称。

要求

必填

类型

字符串

string

字段的标签。

要求

可选

类型

字符串

默认

模型字段的 string 属性

select

字段的行为和显示方式。它可以有以下两种不同的值:

one

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

multi

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

要求

可选

类型

字符串

默认

一个

groups

元素显示给的用户组的逗号分隔列表。如果不属于这些组中的至少一个,用户将无法看到该元素。可以通过在组前添加否定 ! 运算符来排除这些组。

Example

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

可选

类型

字符串

默认

''

icon

字段的图标。

要求

可选

类型

字符串

默认

''

color

字段的颜色。

要求

可选

类型

字符串

默认

''

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

hierarchize

是否应将子类别显示在其父类别下,还是在同一层级显示。

要求

可选

类型

布尔值

默认

True

作用域

Many2one 字段

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

enable_counters

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

小技巧

此属性的存在是为了避免影响性能。另一种解决性能问题的方法是覆盖 search_panel_select_rangesearch_panel_select_multi_range 方法。

要求

可选

类型

布尔值

默认

False

expand

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

要求

可选

类型

布尔值

默认

False

limit

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

要求

可选

类型

int

默认

200

domain

记录必须满足的条件。

Example

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

可选

类型

Python 表达式

默认

[]

groupby

应在哪个字段上对值进行分组。

要求

可选

类型

字符串

默认

''

作用域

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`(打开对话框)的动作时显示。

要求

可选

类型

字符串

默认

''

create

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

要求

可选

类型

布尔值

默认

True

edit

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

要求

可选

类型

布尔值

默认

True

delete

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

要求

可选

类型

布尔值

默认

True

default_group_by

如果通过动作或当前搜索(参见 搜索)未指定分组,则应默认根据该字段对记录进行分组。

要求

可选

类型

字符串

默认

''

default_order

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

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

Example

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

可选

类型

字符串

默认

''

class

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

要求

可选

类型

字符串

默认

''

examples

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

要求

可选

类型

字符串

默认

''

group_create

是否显示 添加新列 选项栏。

要求

可选

类型

布尔值

默认

True

group_delete

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

要求

可选

类型

布尔值

默认

True

group_edit

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

要求

可选

类型

布尔值

默认

True

groups_draggable

是否可以重新排序列。

要求

可选

类型

布尔值

默认

True

records_draggable

是否可以在分组的看板视图中拖动记录。

要求

可选

类型

布尔值

默认

True

archivable

是否可以在模型上定义 active 字段时,对列中的记录进行归档和取消归档操作。

要求

可选

类型

布尔值

默认

True

quick_create

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

要求

可选

类型

布尔值

默认

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

quick_create_view

当使用记录的快速创建时,打开的 表单 视图的引用。

要求

可选

类型

字符串

默认

''

on_create

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

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

要求

可选

类型

字符串

默认

''

can_open

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

要求

可选

类型

布尔值

默认

True

highlight_color

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

要求

可选

类型

字符串

sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

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

要渲染的字段名称。

要求

必填

类型

字符串

widget

该字段使用的组件。所选组件可以改变字段的显示方式和/或编辑方式。它指的是注册到 fields 注册表中的 JavaScript 实现(一个 Owl 组件)。

要求

可选

类型

字符串

默认情况下,字段节点会被一个包含其格式化值的 <span> 替换,除非指定了 widget 属性,此时其渲染和行为取决于相应的小部件。widget 属性可以有以下不同值:

handle

允许通过拖放操作对记录进行重新排序,使用相应的字段作为排序依据。

kanban_color_picker

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

查看 字段部分 以了解各种小部件及其选项。

渲染上下文

看板模板通过 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

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

  • 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

表示该视图为只读。

类型

布尔值

selection_mode

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

类型

布尔值

luxon

luxon 对象,用于操作日期和日期时间字段的值。

JSON

包含 parse 方法的 JavaScript JSON 命名空间对象,用于将 JSON 字段值解析为 JavaScript 对象。

小部件

widget 元素允许在卡片中插入通过 JavaScript 动态生成的 HTML。它具有一个必需的 name 属性,该属性引用已注册到 view_widgets 注册表中的 JavaScript 实现(一个 Owl 组件)。

查看 小部件部分 以了解各种小部件及其选项。

布局

可以使用标准的 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 方向的弹性容器,以便于在同一行上轻松显示多个字段。

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 节点是一个类似于卡片的弹性盒子容器,当没有 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 元素也可以在看板 模板 之外 使用。在这种情况下,它可以用来声明那些不在卡片中显示的字段,但仍需要获取,例如因为它们的值被用在 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>
要求

可选

类型

字符串

默认

显示

进度条: 在列的顶部显示进度条

progressbar 元素用于在分组看板视图中的看板列上方定义一个进度条。

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

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

field

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

要求

必填

类型

字符串

colors

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

要求

必填

类型

JSON

sum_field

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

要求

可选

类型

字符串

默认

''

可能的渲染结构和表示方式

../../../_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 视图有两种使用场景:

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

  • 它们可以用作实际的 QWeb 视图(在动作中打开),在这种情况下,应将它们定义为具有显式 ``type``(不能推断)和模型的常规视图。

qweb-as-view 对基本 qweb-as-template 的主要扩展包括:

  • qweb-as-view 对带有 CSS 类 o_qweb_cp_buttons<nav> 元素有特殊处理:其内容应为按钮,并将被提取并移动到控制面板的按钮区域,<nav> 本身将被删除。这是为了解决控制面板视图尚未存在时的临时解决方案。

  • qweb-as-view 渲染会向标准 qweb 渲染上下文中添加若干项:

    模型

    绑定到此 qweb 视图的模型

    由搜索视图提供的领域

    上下文

    由搜索视图提供的上下文

    记录

    一个对 model.search(domain) 的惰性代理,如果您只需要遍历记录而不需要执行更复杂的操作(例如分组)时可以使用它。

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

    • _qweb_prepare_context(view_id, domain) 为 qweb 作为视图的渲染上下文做准备

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

图表

图表视图用于可视化多个记录或记录组的聚合数据。其根元素是 <graph>,它可以包含以下属性:

``类型``(可选)

其中一个是 bar``(默认)、``pieline,用于指定要使用的图表类型

堆叠 (可选)

仅用于 bar 图表。设置为 0 以防止用户组内的条形图初始时堆叠。

disable_linking (可选)

设置为 1 以防止点击图表时重定向到列表视图

订单 (可选)

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

字符串 (可选)

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

sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

False

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

名称 (必填)

视图中要使用的字段名称。如果用于分组(而非聚合)

invisible (可选)

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

``类型``(可选)

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

interval (可选)

对于日期和日期时间字段,按指定的间隔(dayweekmonthquarteryear)进行分组,而不是按具体的日期时间(固定秒级精度)或日期(固定天级精度)进行分组。默认值为 month

字符串 (可选)

仅用于字段类型为 type="measure" 的情况。该名称将用于在图表视图中显示该字段,会覆盖字段的默认 Python 字符串属性。

这些度量值是根据模型字段自动生成的;仅使用可聚合的字段。这些度量值还会根据字段的字符串进行字母顺序排序。

警告

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

在图表视图中,一个 field 可以具有 widget 属性来指定其格式。小部件应为字段格式化器,其中最常见的是 float_timemonetary

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

透视表

透视表视图用于以 透视表 的形式展示聚合数据。其根元素是 <pivot>,可以包含以下属性:

disable_linking (可选)

设置为 1 以移除表格单元格到列表视图的链接。

display_quantity (可选)

设置为 1 以默认显示“数量”列。

default_order (可选)

视图中使用的默认排序方式,包括排序字段名称和升序(asc)或降序(desc)。

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

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

名称 (必填)

视图中要使用的字段名称。如果用于分组(而非聚合)

字符串 (可选)

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

``类型``(可选)

表示该字段是否应作为分组依据,或在组内作为聚合值使用。可能的取值为:

(默认)

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

创建按列分组

测量

组内要聚合的字段

间隔

对于日期和日期时间字段,按指定的间隔(dayweekmonthquarteryear)进行分组,而不是按具体的日期时间(固定秒级精度)或日期(固定天级精度)进行分组。

invisible (可选)

如果为真,该字段将既不会出现在“激活指标”中,也不会出现在“可选指标”中(对于无法进行聚合的字段很有用,例如单位不同的字段,如 € 和 $)。

sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

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>。日历视图上的可用属性包括:

字符串

字符串(默认:''

如果打开一个没有名称的动作,且目标为 “new”(打开对话框),则会显示此视图标题。

创建

bool(默认:True

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

编辑

bool(默认:True

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

删除

bool(默认:True

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

date_start (必填)

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

日期结束

记录中保存事件结束日期的字段名称,如果提供了 date_stop,则记录可以在日历中直接通过拖放操作进行移动

日期延迟

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

颜色

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

表单视图ID

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

打开弹窗

如果选项 ‘event_open_popup’ 设置为 true,则日历视图会以表单视图对话框(FormViewDialog)打开事件(或记录)。否则,它会以新的表单视图打开事件(通过 do_action 实现)。

快速创建

启用点击快速创建事件:仅向用户请求一个 name``(此值保存到的字段可通过 ``rec_name 控制),并尝试仅使用该名称和点击的事件时间创建新事件。如果快速创建失败,则回退到完整表单对话框。

快速创建视图ID

当设置属性 quick_create 时打开的视图,用户创建事件而非默认对话框。

创建名称字段

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

全天

记录上表示相应事件是否被标记为全天事件(持续时间不相关)的布尔字段名称

模式

默认加载日历时的显示模式。可能的属性包括:dayweekmonthyear

比例

用逗号分隔的缩放级别列表。默认情况下,所有缩放级别都可用。请参阅 mode 以获取可能的缩放值。

创建删除

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

<字段>

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

字段可以具有其他属性:

invisible

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

头像字段

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

写入模型写入字段过滤字段

你可以添加一个筛选器并将结果保存到定义的模型中,筛选器会显示在侧边栏中。filter_field 是可选的,用于指定将保存筛选器状态的字段。

筛选器颜色

使用 “True” 在侧边栏的筛选器中添加此字段。您可以指定一个 color 字段,用于对复选框进行着色。

模型通用项

Model._date_name = 'date'

field to use for default calendar view

活动

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

警告

活动视图仅在安装了 mail 模块,并且模型继承自 mail.activity.mixin 时才可用。

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

字符串 (必填)

一个标题,用于描述该视图

视图元素的可能子元素包括:

字段

声明用于活动 逻辑 的字段。如果该字段仅在活动视图中显示,则无需预先声明。

可能的属性包括:

名称 (必填)

要获取的字段的名称

templates

定义了 QWeb 模板 模板。卡片定义可以拆分为多个模板以提高清晰度,但活动视图 必须 定义一个根模板 activity-box,该模板将为每条记录渲染一次。

活动视图主要使用标准的 JavaScript QWeb,并提供以下上下文变量(详见 看板 以获取更多详细信息):

小部件

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

记录

一个包含所有请求字段作为其属性的对象。每个字段有两个属性 valueraw_value

队列

Enterprise feature

协作视图用于显示和理解某些数据在一段时间内的变化方式。例如,想象某项业务中客户可以订阅某种服务。协作视图可以显示每个月的总订阅数,并研究客户离开服务的比率(流失率)。单击某个单元格时,协作视图会将您重定向到一个新的动作,在该动作中您将只看到该单元格时间区间内的记录;此动作包含一个列表视图和一个表单视图。

注解

默认情况下,群体视图将使用动作中定义的相同列表视图和表单视图。您可以将列表视图和表单视图传递到动作的上下文中,以设置/覆盖将要使用的视图(使用的上下文键为 form_view_idlist_view_id)。

例如,以下是一个非常简单的分组视图:

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

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

字符串 (必填)

一个标题,用于描述该视图

date_start (必填)

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

date_stop (必填)

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

disable_linking (可选)

设置为 1 以防止点击群组单元格时重定向到列表视图。

``mode``(可选)

一个用于描述模式的字符串。它应该是 ‘churn’ 或 ‘retention’(默认)。在 churn 模式下,数值将从 0% 开始随时间累积,而在 retention 模式下,数值将从 100% 开始随时间减少。

时间线 (可选)

一个用于描述时间线的字符串。它应该是 “backward” 或 “forward”(默认)。正向时间线将从 date_start 显示到 date_stop,而反向时间线则会从 date_stop 显示到 date_start(当 date_start 在未来 / 大于 date_stop 时)。

interval (可选)

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

测量 (可选)

可以进行聚合的字段。此字段将用于计算每个单元格的值。如果未设置,群组视图将统计出现次数。

<字段> (可选)

允许指定一个特定字段,以便从可用的度量中对其进行管理,其主要用途是隐藏该字段,使其不显示在可选度量中:

名称 (必填)

视图中使用的字段名称。

字符串 (可选)

字段在群组视图中显示时使用的名称,将覆盖字段的默认 Python 字符串属性。

invisible (可选)

如果为 true,则该字段既不会出现在活动度量中,也不会出现在可选度量中(对于无法进行聚合的字段很有用,例如单位不同的字段,如 € 和 $)。如果值是一个域,则在当前行记录的上下文中对域进行求值,如果为 True,则在该单元格上设置相应的属性。

小部件 (可选)

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

odoo.addons.base.models.ir_ui_view.sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

False

网格

Enterprise feature

限制

此视图仍在开发中,可能需要扩展或修改。

  • 只有 date 列字段经过了测试,selectionmany2one 虽然名义上已实现并受支持,但尚未经过测试,datetime 完全未实现。

  • 列单元格几乎无法配置,并且必须为数值类型

  • 单元格调整默认是禁用的,必须进行配置以启用。

  • createeditdelete ACL 元数据由于 fields_view_get 后处理的限制,不会自动设置在视图根节点上(有一个固定显式列表,列出了获得这些属性的视图类型)

模式

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

``<grid>``(1)

架构根元素

  • 必填的 string 属性

  • 可选的 createeditdelete 属性

  • 可选的 调整adjust_name 属性

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

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

    行域

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

    列字段

    调整后的单元格的列名

    列值

    该调整单元格的列值

    字段

    调整后的单元格的度量字段

    修改

    单元格旧值与调整后值之间的差异,可能是正数也可能是负数

  • 可选的 hide_line_totalhide_column_total 属性

    hide_line_total

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

    隐藏列总计

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

  • 可选的 barchart_total 属性

    柱状图总计

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

  • 可选的 create_inlinedisplay_empty 属性

    创建内联

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

    显示空值

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

<按钮> (0+)

常规 Odoo 动作按钮,在视图标题中显示

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

  • 必须的 type 属性,可以是 object动作

    注解

    工作流按钮不被支持

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

  • 可选 context

服务器回调函数会接收到视图中显示的所有记录 ID,要么是作为方法调用时传入的 object 按钮的 ID,要么是作为上下文中的 active_ids``(``动作 按钮)传递的。

<字段类型="行"> (1+)

行分组字段,如果有设置搜索视图的分组筛选器,则将被替换。

视图中 row 字段的顺序决定了其分组深度:如果第一个字段是 school,第二个字段是 age,则记录将首先按 school 分组,并在每个学校内按 age 进行分组。

<字段类型="列"> (1)

列分组字段。

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

名称

可以使用 grid_range 上下文值来覆盖默认范围(默认为第一个范围)

字符串

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

span

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

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

步骤

步骤在某一列与前一列/后一列之间的符号名称

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

<field type="measure"> (1)

单元格字段,自动汇总(通过 read_group)。

该字段可以使用 widget 属性来自定义其显示方式。

服务器交互

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

  • ``read_grid``(由模块提供给所有模型)返回网格的几乎全部内容作为字典:

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

      (必填)

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

      domain (必填)

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

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

      (必填)

      查看行标题值

      domain (必填)

      查看列域值

      当前 (可选)

      布尔类型,用于标记/突出显示一列

    • 网格数据作为列表(行)的列表(单元格)的单元格字典,每个字典包含以下键:

      单元格关联的数值

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

      大小

      单元格中分组的记录数量

      只读 (可选)

      一个布尔值,表示此特定单元格不应为客户端可编辑状态

      (可选)

      单元格容器上要添加的类列表(作为字符串),位于单元格的 TD 和单元格的可编辑元素之间。

      如果此列表与基础类(以 o_grid_cell_ 为前缀)发生冲突,此列表中的类将被忽略。

      请注意,网格数据是*密集*的,如果查询数据库时没有找到与单元格匹配的用户组,该单元格将生成一个“空”单元格,并为必填键使用默认值。

    • prevnext,可以是假值(无分页),也可以是将合并到视图自身上下文中的上下文项,用于通过 read_grid 读取上一页或下一页。应将其视为不透明的。

  • read_grid_domain(field, range)``(由模块提供给所有模型)返回与当前配置的“网格跨度”匹配的域。``read_grid 内部也会执行此操作,但有时独立调用此方法也是有用或必要的,例如配合 search_countread_group 使用。

  • adjust_grid,目前尚无统一的实现方式,其语义可能会随着时间和使用场景的变化而演变。

服务器钩子

read_grid 调用多个钩子,允许在不覆盖整个方法的情况下自定义其操作:

_grid_format_cell(用户组, 单元格字段)

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

_grid_make_empty_cell(row_domain, column_domain, view_domain)

如果不存在对应的用户组,则生成一个空的单元格版本

_grid_column_info(名称, 范围)

根据列类型生成一个 ColumnMetadata 对象,将值直接返回(作为 read_grid 的一部分)或用于查询并重新格式化 read_groupread_grid

grouping

实际的列分组字段/查询

在列字段分页的情况下,应用于 read_group 的域,可以是一个空列表

上一页下一页

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

每页显示的列值,每个值是一个字典,包含以下键:

用于整个列的字段名称到值的字典映射,通常只是 name -> 一个值

与该特定列匹配的域

当前

True 如果当前列应在网格中特别标出,False 否则

格式

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

访问控制列表

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

  • 如果视图不可创建,将不会显示 Add a Line 按钮(它目前用于创建一条新记录)

上下文键

网格范围

选择在视图包含多个范围时,默认应使用的范围

网格锚点

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

对于日期字段,这是计算初始时间范围的参考日期。默认的日期锚点是”今天”(在用户的时区中)

甘特图

Enterprise feature

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

甘特图视图的根元素是 <gantt/>,它没有子元素,但可以包含以下属性:

字符串

字符串(默认:''

如果打开一个没有名称的动作,且目标为 “new”(打开对话框),则会显示此视图标题。

创建

bool(默认:True

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

编辑

bool(默认:True

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

删除

bool(默认:True

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

date_start (必填)

记录中提供事件开始时间的字段名称。

date_stop (必填)

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

依赖字段

用于在两个记录之间提供依赖关系的 many2many 字段名称。如果 B 依赖于 A,则 dependency_field 是允许从 B 获取 A 的字段。此字段和 dependency_inverted_field 字段一起用于在标签之间绘制依赖箭头并重新安排它们。

反向字段 (如果提供了 依赖字段,则为必填项)

many2many 字段的名称,该字段提供了与 dependency_field 相反的依赖关系。如果 B 依赖于 A,则 dependency_inverted_field 是允许从 A 获取 B 的字段。

颜色

根据其值对标签进行着色的字段名称

装饰-{$name}

Python 表达式,其结果为布尔值

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

{$name} 可以是以下任意一种 Bootstrap 上下文颜色`_(``danger`infosecondarysuccesswarning)。

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

值是 Python 表达式。对于每条记录,表达式会以记录的属性作为上下文值进行求值,如果结果为 true,则会将相应的样式应用到该行。以下是上下文中可用的其他一些值:

  • uid: 当前用户的ID,

  • 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>
默认分组字段

按字段分组任务的名称

disable_drag_drop

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

合并

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

合并最大值

包含 “按…分组” 字段作为键,以及在单元格显示为红色之前可以达到的最大合并值的字典(例如 {"user_id": 100}

排除合并

字段名称,用于描述如果设置为 true,则该任务是否应从合并中排除。如果设置为 true,会在合并行中显示一个条纹区域。

创建, 单元格创建, 编辑, 删除, 计划`

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

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

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

  • edit: 如果启用,打开的记录将处于编辑模式(即可编辑)。

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

Example

当你不希望在甘特图视图中创建记录,并且模型中的开始和结束日期为必填项时,应禁用计划功能,因为将永远找不到任何记录。

偏移量

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

进度

记录事件的完成百分比字段名称,范围在 0 到 100 之间

字符串

甘特视图的标题

精度

指定每个刻度上药丸的吸附精度的 JSON 对象。

scale 为 day 时的可选值为(默认值:hour):

  • hour:记录时间按整点对齐(例如:7:12 会变为 8:00)

  • hour:half:记录时间对齐到半小时(例如:7:12 变为 7:30)

  • hour:quarter:将时间记录对齐到半小时(例如:7:12 会变为 7:15)

scale week 的可能取值为(默认值:day:half):

  • day:记录时间对齐到完整天数(例如:上午7:28变为前一天的23:59:59,晚上10:32变为当天的12:00 PM)

  • day:half:记录时间对齐到半小时(例如:上午7:28 变为中午12:00)

scale 的可能取值为 month``(默认值:``day:half):

  • day:记录时间对齐到完整天数(例如:上午7:28变为前一天的23:59:59,晚上10:32变为当天的12:00 PM)

  • day:half:记录时间对齐到半小时(例如:上午7:28 变为中午12:00)

year st 始终对齐到完整的一天。

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

总计行

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

折叠第一级

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

显示不可用性

布尔值,用于标记模型的 gantt_unavailability 函数返回的日期在甘特视图中为可用。这些记录仍然可以被安排,但其不可用状态会以视觉方式显示。(默认:false

默认比例

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

  • 月份

比例

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

templates

定义了 QWeb 模板 模板 gantt-popover,该模板在用户将鼠标悬停在甘特视图中的某个记录上时使用。

甘特视图主要使用标准的 JavaScript QWeb,并提供以下上下文变量:

小部件

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

on_create

如果在点击视图中的“添加”按钮时指定,将不会打开通用对话框,而是启动一个客户端动作。这应该包含该动作的 XML ID(例如:on_create="%(my_module.my_wizard)d"

表单视图ID

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

动态范围

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

字段标签

如果设置为 true,则当缩放级别设置为周或月时,时间会显示在标签中。例如:7:00 AM - 11:00 AM (4h) - DST 任务 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>

将在按 user_id 分组时在用户名旁边显示用户的头像。

odoo.addons.base.models.ir_ui_view.sample

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

这些假数据记录对某些字段名称/模型有启发式处理。例如,在模型 res.users 上的字段 display_name 会填充示例人员姓名,而 email 字段则会采用 firstname.lastname@sample.demo 的格式。

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

要求

可选

类型

布尔值

默认

False

映射

Enterprise feature

此视图能够在地图上显示记录及其之间的路线。记录以标记(pins)的形式表示。它还允许在与记录标记相关联的弹出窗口中可视化模型中的字段。

注解

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

接口

该视图使用位置数据平台的接口来获取地图背景图块(tiles),执行地理正向编码(将地址转换为一组坐标)并获取路线。该视图实现了两个接口:OpenStreetMap 和 MapBox。默认使用 OpenStreetMap,能够获取 tiles 并执行 geoforwarding。此接口不需要令牌。一旦在通用设置中提供了有效的 MapBox 令牌,视图将切换到 MapBox 接口。该接口速度更快,并支持路线计算。可以通过 signing up 到 MapBox 获取令牌。

结构组件

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

res_partner

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

默认排序

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

路由

如果 1,则显示记录之间的路线。该视图需要有效的 MapBox 令牌,并且至少有两个定位的记录(即记录包含 res.partner 多对一字段,且该业务伙伴具有地址或有效坐标)。

隐藏名称

如果 1,则从便签的弹出窗口中隐藏名称(默认:0)。

隐藏地址

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

隐藏标题

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

面板标题

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

限制

最多要获取的记录数(默认:80)。必须为正整数。

<map> 元素可以包含多个 <field> 元素。每个 <field> 元素被解释为图钉弹出窗口中的一行。字段的属性如下:

名称

要显示的字段。

字符串

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

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