查看架构¶
通用架构¶
视图的体系结构由 JavaScript 框架解释的 XML 数据定义。
对于大多数视图,有一个 *.rng 文件定义属性和可能的架构。有些视图不受此类文件的约束,要么是因为它们接受 HTML 内容,要么是出于性能原因。
注解
当前上下文和用户访问权限可能会影响查看能力。
其他资料
Python 表达式¶
当评估节点属性时,例如通过 readonly 修饰符,可以提供一个 Python 表达式,该表达式将在可以访问以下变量的环境中执行:
当前视图中存在的所有字段的名称,包含当前记录的值,list view 中的
column_invisible除外;关系字段以 ID 列表的形式给出;当前记录的ID;
parent:引用容器的记录;仅在 relational fields 的子视图内;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`(打开对话框)的操作时,才会显示该信息。
- 要求
选修的
- 类型
斯特
- 默认
''
- create
禁用/启用视图上的记录创建。
- 要求
选修的
- 类型
布尔值
- 默认
True
- edit
在视图上禁用/启用记录版本。
- 要求
选修的
- 类型
布尔值
- 默认
True
- duplicate
通过 操作 下拉列表在视图上禁用/启用记录复制。
- 要求
选修的
- 类型
布尔值
- 默认
True
- delete
通过 Action 下拉列表禁用/启用视图上的记录删除。
- 要求
选修的
- 类型
布尔值
- 默认
True
- js_class
Web 客户端将实例化的 JavaScript 组件的名称,而不是表单视图。
- 要求
选修的
- 类型
斯特
- 默认
''
- disable_autofocus
禁用对视图中第一个字段的自动聚焦。
- 要求
选修的
- 类型
布尔值
- 默认
False
语义成分¶
语义组件与 Odoo 系统相结合并允许与其交互。
表单视图接受以下子语义组件:field、label、button、聊天小部件 和 附件预览小部件。
占位符全部大写。
field:显示字段值¶
field 元素呈现(并可能允许编辑)当前记录的单个字段。
支持在表单视图中多次使用同一字段,并且这些字段可以接收不同的 invisible 和 readonly 属性值。这些字段可能具有相同的值,但可以以不同的方式显示。但是,当存在多个具有不同 required 属性值的字段时,无法保证该行为。
<form>
<field name="FIELD_NAME"/>
</form>
field 元素可以具有以下属性:
- name
要呈现的字段的名称。
- 要求
强制的
- 类型
斯特
- widget
用于表示字段的小部件。选定的小部件可以更改字段的呈现方式和/或编辑方式。它指的是注册到
fields注册表的 Javascript 实现(Owl 组件)。- 要求
选修的
- 类型
斯特
- id
节点 ID。当视图中同一字段多次出现时很有用(请参阅 label:显示字段标签)。
- 要求
选修的
- 类型
斯特
- 默认
字段名称
- string
字段的标签。
- 要求
选修的
- 类型
斯特
- 默认
模型字段的
string属性
- help
将鼠标悬停在字段或其标签上时显示的工具提示。
- 要求
选修的
- 类型
斯特
- 默认
''
- options
字段小部件(包括默认小部件)的配置选项,作为计算结果为字典的 Python 表达式。
对于关系字段,可以使用以下选项:
no_create、no_quick_create、no_open和no_create_edit。Example
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'FIELD_NAME', 'no_quick_create': True}"/>
- 要求
选修的
- 类型
- 默认
{}
- readonly
该字段是否可由用户修改 (
False) 还是只读 (True),作为计算结果为 bool 的 Python 表达式。Example
<field name="fname_a" readonly="True"/> <field name="fname_b" readonly="name_a in [fname_b, parent.fname_d]"/>
- 要求
选修的
- 类型
- 默认
False
- required
该字段是否可以留空 (
False) 还是必须设置 (True),作为计算结果为 bool 的 Python 表达式。Example
<field name="fname_a" required="True"/> <field name="fname_b" required="fname_c != 3"/>
- 要求
选修的
- 类型
- 默认
False
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- domain
显示现有记录以供选择时要应用的过滤器,作为计算结果为 domain 的 Python 表达式。
Example
<field name="fname" domain="[('fname_a', '=', parent.fname_b)]"/>
- 要求
选修的
- 类型
- 默认
[]- 范围
关系字段
- 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, }"/>
- 要求
选修的
- 类型
- 默认
{}- 范围
关系字段
- nolabel
字段标签是否应隐藏。
- 要求
选修的
- 类型
布尔值
- 默认
False- 范围
作为
group元素的直接子元素的字段
- placeholder
在*空*字段上显示的帮助消息。它可以替代复杂形式的字段标签。但是,它“不应该”是数据示例,因为用户可能会将占位符文本与填充字段混淆。
- 要求
选修的
- 类型
斯特
- 默认
''
- mode
用于字段链接记录的以逗号分隔的显示模式(视图类型)列表。允许的模式有:
list、form、kanban和graph。- 要求
选修的
- 类型
斯特
- 默认
list- 范围
One2many和Many2many字段
- class
要在生成的元素上设置的 HTML class。
该样式使用 Bootstrap 框架和 UI icons。常见的 Odoo 类包括:
oe_inline:防止字段后面出现通常的换行符,并限制它们的跨度;oe_left、oe_right:将`floats <https://developer.mozilla.org/en-US/docs/Web/CSS/float>`_元素移动到对应方向;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
在移动环境中选择记录时应使用的特定看板 view record 的 XMLID。
- 要求
选修的
- 类型
斯特
- 默认
''- 范围
关系字段
- default_focus
视图打开时字段是否聚焦。它只能应用于一个视图的一个字段。
- 要求
选修的
- 类型
布尔值
- 默认
False
注解
Relational fields 节点可以包含特定的子视图。
Example
<field name="children_ids">
<list>
<field name="name"/>
</list>
<form>
<field name="id"/>
<field name="name"/>
</form>
</field>
label:显示字段标签¶
当 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属性。- 要求
强制的
- 类型
斯特
- string
要显示的标签。
- 要求
选修的
- 类型
斯特
- 默认
字段的标签来自模型上的字段定义
- class
要在生成的元素上设置的 HTML class。
该样式使用 Bootstrap 框架和 UI icons。常见的 Odoo 类包括:
oe_inline:防止字段后面出现通常的换行符,并限制它们的跨度;oe_left、oe_right:将`floats <https://developer.mozilla.org/en-US/docs/Web/CSS/float>`_元素移动到对应方向;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),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
聊天小部件¶
chatter widget 是通信和日志工具,允许直接从记录(任务、订单、发票、事件、注释…)向同事和客户发送电子邮件。
当模型继承 mail.thread mixin 时,它会添加一个带有 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:定义列布局¶
group 元素用于定义表单中的列布局。默认情况下,组定义 2 列,并且组的最直接子级采用单列。
作为组的直接子元素的 field 元素默认显示 label,并且标签和字段本身各自具有 1 的 colspan。
子级水平布局(他们尝试在更改行之前填充下一列)。
<form>
<group>
...
</group>
</form>
group 元素可以具有以下属性:
- string
为该组显示的标题。
- 要求
选修的
- 类型
斯特
- 默认
''
- col
group中的列数。- 要求
选修的
- 类型
整数
- 默认
2
- colspan
子元素占用的列数。
- 要求
选修的
- 类型
整数
- 默认
1
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
可能的结构及其渲染表示
<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>
notebook 和 page:添加选项卡式部分¶
notebook 元素定义一个选项卡式部分。每个选项卡都是通过 page 子元素定义的。
notebook 元素不应放置在 group 元素内。
<form>
<notebook>
<page string="LABEL">
...
</page>
</notebook>
</form>
page 元素可以具有以下属性:
- string
选项卡的标题。
- 要求
选修的
- 类型
str- 默认
''
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
可能的结构及其渲染表示
<form>
<notebook>
<page string="Page1">
...
</page>
<page string="Page2">
...
</page>
</notebook>
</form>
|
newline:开始新的组行¶
newline 元素在 group 元素中使用,以提前结束当前行并立即切换到新行,而不预先填充任何剩余列。
<form>
<group>
...
<newline/>
...
</group>
</form>
可能的结构及其渲染表示
<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
标题作为章节标题。
- 要求
选修的
- 类型
str- 默认
''
可能的结构及其渲染表示
<form>
<group>
<FIELD/>
<separator string="Title 1"/>
<FIELD/>
<group>
<FIELD/>
<separator string="Title 2"/>
<FIELD/>
</group>
<group>
<FIELD/>
<FIELD/>
</group>
</group>
</form>
|
小技巧
separator 元素可用于实现同一内部 group 元素内的元素之间的视觉分离,同时保持它们水平对齐。
标题容器¶
可以使用类为 oe_title 的 div 元素创建标题 field 元素容器。
<form>
<sheet>
<div class="oe_title">
<h1><FIELD/></h1>
</div>
</sheet>
<form>
设置¶
设置视图是 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>
成分¶
设置视图接受 form 视图的 field、label 和 button 元素,以及三个附加子元素:app、block 和 setting。
占位符全部大写。
app:声明申请¶
app 元素用于在设置视图上声明应用程序。它在视图的侧边栏上创建一个带有应用程序徽标的条目。它在搜索时也充当分隔符。
<form>
<app string="NAME" name="TECHNICAL_NAME">
...
</app>
</form>
app 元素可以具有以下属性:
- string
应用程序的名称。
- 要求
强制的
- 类型
斯特
- name
应用程序的技术名称(模块的名称)。
- 要求
强制的
- 类型
斯特
- logo
徽标的 relative path。
- 要求
选修的
- 类型
- 默认
使用
name属性计算的路径:/name/static/description/icon.png
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
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),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
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
默认情况下,设置在两个面板(左侧和右侧)上视觉上分开,并用于编辑给定的 field。通过定义
type="header",会呈现一种特殊的设置。该设置用于修改其他设置的范围。例如,在网站应用程序上,此设置用于指示其他设置适用于哪个网站。标题设置在视觉上表示为屏幕顶部的横幅。- 要求
选修的
- 类型
斯特
- 默认
''
- string
用作设置标签的文本。
- 要求
选修的
- 类型
斯特
- 默认
第一个字段的标签
- title
用作工具提示的文本。
- 要求
选修的
- 类型
斯特
- 默认
''
- help
设置的描述。该文本显示在设置标签的正下方(带有
text-muted类)。- 要求
选修的
- 类型
斯特
- 默认
''
- company_dependent
该设置是否是公司特定的。如果设置,设置标签旁边会显示一个图标。
它仅接受值
'1'。- 要求
选修的
- 类型
斯特
- 默认
''
- documentation
有关设置的文档的 path。如果设置,设置标签旁边会显示一个可单击的图标。该路径可以是绝对路径或 relative path。在后一种情况下,它是相对于
https://www.chinaodoo.com/documentation/<version>的。- 要求
选修的
- 类型
path_- 默认
''
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
列表¶
列表视图的根元素是 list (以前的名称是 tree)。
可能的结构及其渲染表示
<list>
...
</list>
|
根属性¶
可以将可选属性添加到根元素 list 以自定义视图。
- string
视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该信息。
- 要求
选修的
- 类型
斯特
- 默认
''
- create
禁用/启用视图上的记录创建。
- 要求
选修的
- 类型
布尔值
- 默认
True
- edit
在视图上禁用/启用记录版本。
- 要求
选修的
- 类型
布尔值
- 默认
True
- delete
通过 Action 下拉列表禁用/启用视图上的记录删除。
- 要求
选修的
- 类型
布尔值
- 默认
True
- import
禁用/启用从视图上的数据导入记录。
- 要求
选修的
- 类型
布尔值
- 默认
True
- export_xlsx
禁用/启用记录导出到视图上的数据。
- 要求
选修的
- 类型
布尔值
- 默认
True
- editable
使视图的记录可就地编辑,并允许从列表的一行创建新记录。它可以有两个不同的值:
- top
新记录从列表顶部创建。
- bottom
新记录从列表底部创建。
内联 form 视图的体系结构源自列表视图。因此,表单视图的字段和按钮上有效的大多数属性都会被列表视图接受,尽管如果列表视图不可编辑,它们可能没有任何意义。
重要
如果
edit属性设置为False,则此行为被禁用。- 要求
选修的
- 类型
斯特
- 默认
''
- multi_edit
激活多重编辑功能,允许一次将多个记录的字段更新为相同的值。
它仅接受值
'1'。- 要求
选修的
- 类型
斯特
- 默认
''
- open_form_view
在每行末尾显示一个按钮以在表单视图中打开记录。
如果视图不可编辑,则它没有任何效果。
- 要求
选修的
- 类型
布尔值
- 默认
False
- default_group_by
如果未通过操作或当前 search 指定分组,则默认情况下应对记录进行分组的字段的名称。
- 要求
选修的
- 类型
斯特
- 默认
''
- default_order
以逗号分隔的字段名称列表,它覆盖通过
_order属性在模型上定义的顺序。要反转字段的排序顺序,请在其后缀
desc,并用空格分隔。Example
<list default_order="sequence,name desc"> ... </list>
- 要求
选修的
- 类型
斯特
- 默认
''
- decoration-<style>
应用于匹配记录行的样式,作为计算结果为 bool 的 Python 表达式。
<style>必须替换为bf`(粗体)、`it`(斜体)、`info、warning、danger、muted、primary和success之一。Example
<list decoration-danger="field_qty > field_limit"> ... </list>
- 要求
选修的
- 类型
- 默认
False
- limit
页面的默认大小。它必须是严格积极的。
- 要求
选修的
- 类型
整数
- 默认
80用于列表视图,40用于表单视图中的 X2many 列表
- groups_limit
列表视图分组时页面上的默认组数。它必须是严格积极的。
- 要求
选修的
- 类型
整数
- 默认
80用于列表视图,40用于表单视图中的 X2many 列表
- expand
列表视图分组时是否默认打开第一级组。
警告
它可能会很慢,具体取决于组的数量。
- 要求
选修的
- 类型
布尔值
- 默认
False
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
成分¶
列表视图接受以下子元素:field、button、groupby、header、control, and create。
占位符全部大写。
field:显示字段值¶
field 元素将所有当前记录的单个字段呈现(并可能允许编辑)作为列。
不支持在列表视图中多次使用同一字段
<list>
<field name="FIELD_NAME"/>
</list>
field 元素可以具有以下属性:
- name
要呈现的字段的名称。
- 要求
强制的
- 类型
斯特
- widget
用于表示字段的小部件。选定的小部件可以更改字段的呈现方式和/或编辑方式。它指的是注册到
fields注册表的 Javascript 实现(Owl 组件)。- 要求
选修的
- 类型
斯特
- string
字段的标签。
- 要求
选修的
- 类型
斯特
- 默认
模型字段的
string属性
- optional
使字段的可见性可选。 The field’s column can be hidden or shown through a button on the view’s header.
它可以有两个不同的值:
- show
默认情况下显示该字段。
- hide
该字段默认隐藏。
Example
<field name="fname_a" optional="show"/> <field name="fname_b" optional="hide"/>
- 要求
选修的
- 类型
斯特
- readonly
该字段是否可由用户修改 (
False) 还是只读 (True),作为计算结果为 bool 的 Python 表达式。Example
<field name="fname_a" readonly="True"/> <field name="fname_b" readonly="name_a in [fname_b, parent.fname_d]"/>
- 要求
选修的
- 类型
- 默认
False
- required
该字段是否可以留空 (
False) 还是必须设置 (True),作为计算结果为 bool 的 Python 表达式。Example
<field name="fname_a" required="True"/> <field name="fname_b" required="fname_c != 3"/>
- 要求
选修的
- 类型
- 默认
False
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
- column_invisible
该列是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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')"/>
- 要求
选修的
- 类型
- 默认
False
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- decoration-<style>
应应用于匹配记录字段的样式,作为计算结果为 bool 的 Python 表达式。
<style>必须替换为bf`(粗体)、`it`(斜体)、`info、warning、danger、muted、primary和success之一。Example
<field name="name" decoration-bf="1"/> <field name="quantity" decoration-info="state == 'draft'"/>
- 要求
选修的
- 类型
- 默认
False
- sum, avg
要显示在列底部的聚合。仅对当前显示的记录计算聚合。聚合操作必须匹配对应字段的`aggregator`。
Example
<field name="sent" sum="Total" /> <field name="clicks_ratio" avg="Average"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- width
列表视图始终尝试优化列之间的可用空间。对于某些字段类型,这是通过强制宽度来完成的,具体取决于字段类型。例如,我们确切地知道显示日期所需的像素数,因此我们可以确保日期字段的列不会占用比严格必要的空间更多的空间,从而为其他列留下额外的空间。但是,框架无法猜测每种字段类型的足够宽度。例如,字符字段可用于对大值或 3 个字母的国家/地区代码进行编码。在后一种情况下,可以直接在拱形中设置宽度(例如
width="40px")。它表示渲染单元格内的值所需的宽度(始终以像素为单位)。列的宽度将是给定值与单元格左右填充的总和。- 要求
选修的
- 类型
斯特
- 默认
''
- nolabel
字段的列标题是否应保留为空。如果设置,该列将不可排序。
它仅接受值
'1'- 要求
选修的
- 类型
斯特
- 默认
''
注解
对列表视图进行分组时,会聚合并显示每个组的数字字段。另外,如果组中的记录过多,则组行的右侧会出现一个寻呼机。因此,当列表视图处于可以分组的情况时,在最后一列中包含数字字段是一种不好的做法。但是,对于表单视图中的 X2many 字段来说,这不会造成问题,因为它们无法分组。
可能的结构及其渲染表示
<list>
<field name="name" string="My Custom Name"/>
<field name="amount" sum="Total"/>
<field name="currency_id"/>
<field name="tax_id"/>
</list>
|
groupby:定义组标题¶
在对 Many2one 字段上的记录进行分组时,groupby 元素用于定义具有 button 元素的组标头。它还接受 field 元素,可用于修饰符。因此,这些字段属于 Many2one 联合模型。这些额外的字段是批量获取的。
<list>
...
<groupby name="FIELD_NAME">
<BUTTONS/>
<FIELDS/>
</groupby>
</list>
groupby 元素可以具有以下属性:
- name
用作标头的
Many2one字段的名称。可以定义带有
type="edit"的特殊 button 元素来打开 Many2one 字段的表单视图。- 要求
强制的
- 类型
斯特
可能的结构及其渲染表示
<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 元素内的字段仅用于获取和存储值,但从不显示。
control:自定义创建和删除操作¶
The control element allows to customize the create and delete actions.特别是,它允许添加具有特定上下文的特殊创建按钮,使用常规视图按钮作为创建操作,并使创建和删除操作仅在某些条件下可用。
重要
The control element is only supported in list views inside One2many or
Many2many fields.
<list>
<control>
<create string="LABEL"/>
<BUTTONS/>
<delete invisible="parent.is_sent">
</control>
...
</list>
control 元素没有属性。它接受以下子元素:
- create
给定的
create元素替换默认的 Add a line 按钮。create元素可以具有以下属性:- string
按钮的文本。
- 要求
强制的
- 类型
斯特
- context
执行按钮调用时合并到视图上下文中的上下文,作为计算结果为字典的 Python 表达式。
- 要求
选修的
- 类型
- 默认
{}
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 Python 表达式。 The parent record and the context can be used in the expresion.- 要求
选修的
- 类型
- 默认
False
- button
- delete¶
delete元素允许有条件地逐行隐藏删除图标。这种类型的孩子只能有一个。它只能有一个属性:- invisible
与
create相同,只不过在这种情况下记录本身也可以在表达式中使用。
可能的结构及其渲染表示
<list>
<field name="name"/>
<field name="amount"/>
<field name="currency"/>
<field name="tax_id"/>
<control>
<create string="Add an item"/>
<create string="Add a section" context="{'default_type': 'section'}"/>
<create string="Add a note" context="{'default_type': 'note'}"/>
</control>
</list>
|
搜索¶
搜索视图与其他视图类型的不同之处在于它们不用于显示内容。尽管它们适用于特定模型,但它们用于过滤另一个视图的内容(通常是聚合视图;例如 列表 和 图形)。
搜索视图的根元素是 search。
它不需要任何属性。
可能的结构及其渲染表示
<search>
...
</search>
|
成分¶
搜索视图接受以下子元素:field、filter、separator、group 和 searchpanel。
占位符全部大写。
field:根据字段值过滤¶
field 元素使用用户提供的值定义域或上下文。生成搜索域时,字段域将相互连接并使用 AND 运算符与过滤器连接。
<search>
<field name="FIELD_NAME"/>
</search>
field 元素可以具有以下属性:
- name
要过滤的字段的名称。
- 要求
强制的
- 类型
斯特
- string
字段的标签。
- 要求
选修的
- 类型
斯特
- 默认
模型字段的
string属性
- operator
默认情况下,字段生成
[(name, operator, value)]形式的域,其中name是字段的名称,value是用户提供的值,可能经过过滤或转换(例如,用户应提供选择字段值的*标签*,而不是值本身)。operator属性允许覆盖默认运算符,这取决于字段的类型(例如,浮点字段为=,字符字段为ilike,many2one 为child_of)。- 要求
选修的
- 类型
斯特
- 默认
=
- filter_domain
用作字段搜索域的域,作为计算结果为 domain 的 Python 表达式。
它可以使用
self变量将提供的值注入自定义域中。与单独使用operator属性相比,它可用于生成更加灵活的域(例如,一次搜索多个字段)。如果同时提供了
operator和filter_domain属性,则filter_domain优先。- 要求
选修的
- 类型
- 默认
[]
- context
要合并到搜索视图所定位的视图上下文中的上下文,作为计算结果为字典的 Python 表达式。
它可以包含用户提供的值,这些值在
self变量下可用。- 要求
选修的
- 类型
- 默认
{}
- domain
应用于允许自动完成的字段的完成结果的过滤器(例如,
Many2one)。- 要求
选修的
- 类型
- 默认
[]
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
可能的结构及其渲染表示
<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 元素用于创建可以在搜索视图中切换的预定义过滤器。它允许将数据添加到搜索上下文 the context passed to the data view for searching/filtering,或将新部分附加到搜索过滤器。
<search>
<filter string="LABEL" domain="DOMAIN"/>
</search>
filter 元素可以具有以下属性:
- name
过滤器的技术名称。它可用于 enable it by default 或用作 inheritance hook。
- 要求
强制的
- 类型
斯特
- string
过滤器的标签。
- 要求
强制的
- 类型
斯特
- help
将鼠标悬停在过滤器上时显示的工具提示。
- 要求
选修的
- 类型
斯特
- 默认
''
- domain
作为搜索域的一部分附加到操作域的域。
- 要求
选修的
- 类型
- 默认
[]
- date
要过滤的
date或datetime字段的名称。使用时,此属性会在 Filters 菜单的子菜单中创建一组可用的过滤器。 The available filters are time-dependent but not dynamic in the sense that their domains are evaluated at the time of the control panel instantiation.
Example
<filter string="Creation Date" name="filter_create_date" date="create_date"/>
默认情况下,这些过滤器包含一个带有不同子过滤器的下拉列表,允许您根据月份、季度和年份进行过滤。此外,您可以创建允许使用域进行过滤的自定义子过滤器。这些自定义过滤器必须具有以下属性:
name、string和domain。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', '>', 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"/>
如果当前月份是 2 月,则下拉列表中最早可选择的月份将为 11 月。
- 要求
选修的
- 类型
整数
- 默认
-2- 范围
具有非空
date属性的过滤器
- end_month
将显示在日期过滤器下拉列表中的最新月份,作为相对于当前月份的偏移量。
Example
<filter string="Creation Date" name="filter_create_date" date="create_date" end_month="2"/>
如果当前月份是二月,则下拉列表中可选择的最新月份将为三月。
- 要求
选修的
- 类型
整数
- 默认
0- 范围
具有非空
date属性的过滤器
- start_year
将显示在日期过滤器下拉列表中的最早年份,作为相对于当前年份的偏移量。
Example
<filter string="Creation Date" name="filter_create_date" date="create_date" start_year="-3"/>
如果当前年份是 2024 年,则下拉列表中最早可选择的年份将为 2021 年。
- 要求
选修的
- 类型
整数
- 默认
-2- 范围
具有非空
date属性的过滤器
- end_year
将显示在日期过滤器下拉列表中的最新年份,作为相对于当前年份的偏移量。
Example
<filter string="Creation Date" name="filter_create_date" date="create_date" end_year="2"/>
如果当前年份是 2024 年,则下拉菜单中可选择的最新年份将为 2025 年。
- 要求
选修的
- 类型
整数
- 默认
0- 范围
具有非空
date属性的过滤器
- default_period
基于时间的过滤器的默认周期(具有
date属性)。它必须是有效过滤器 ID 之一或以逗号分隔的列表。有效的过滤器 ID 包括以下内容:
first_quarter、second_quarter、third_quarter和fourth_quarter。month、month-x和month+x之一,其中x是start_month和end_month之间的非零整数值。year、year-x和year+x之一,其中x是start_year和end_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', '>', datetime.datetime.combine(context_today() - relativedelta(days=30), datetime.time(23, 59, 59)).to_utc())]"/> </filter>
- 要求
选修的
- 类型
斯特
- 默认
month,或最接近当前月份的值(如果不可用)- 范围
具有非空
date属性的过滤器
- invisible
元素是可见 (
False) 还是隐藏 (True),作为计算结果为 bool 的 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>
- 要求
选修的
- 类型
- 默认
False
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- context
上下文合并到操作的域中以生成搜索域
使用字段作为值设置的上下文键
group_by可用于定义 Group By 菜单中可用的组。当字段的类型为date或datetime时,过滤器会生成 Group By 菜单的子菜单,其中包含以下可用间隔选项:Year、Quarter、Month、Week 和 Day。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'}"/>
注解
在字段上分组的
formatted_read_group的结果可能会受到其group_expand属性的影响,允许在需要时显示空组。如需了解更多信息,请参阅:class:~odoo.fields.Field。- 要求
选修的
- 类型
- 默认
{}
小心
过滤器序列(没有分隔它们的非过滤器元素)被视为包含复合:它们将由 OR 而不是通常的 AND 组成。
Example
<filter domain="[('state', '=', 'draft')]"/>
<filter domain="[('state', '=', 'done')]"/>
显示 state 字段为 draft 或 done 的记录。
Example
<filter domain="[('state', '=', 'draft')]"/>
<separator/>
<filter domain="[('delay', '<', 15)]"/>
state 字段为 draft 且 delay 字段小于 15 的记录。
可能的结构及其渲染表示
<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 元素用于在简单搜索视图中分隔 filters 组。对于更复杂的搜索视图,建议使用 group 元素。
<search>
<FILTERS/>
<separator/>
<FILTERS/>
</search>
separator 元素没有属性。
group:单独的过滤器组¶
group 元素用于在杂乱的搜索视图中分隔 filters 组。在更简单的搜索视图中,它可以替换 separator 元素。
<search>
<group>
<FILTERS/>
</group>
</search>
group 元素没有属性。
searchpanel:显示搜索面板¶
searchpanel 元素在多记录视图的左侧显示一个搜索面板。它允许根据给定字段快速过滤数据。
<search>
<searchpanel>
<FIELDS/>
</searchpanel>
</search>
searchpanel 元素仅接受 field 子元素。
用作 searchpanel 元素的子元素的 field 元素可以具有以下属性:
- name
要过滤的字段的名称。
- 要求
强制的
- 类型
斯特
- string
字段的标签。
- 要求
选修的
- 类型
斯特
- 默认
模型字段的
string属性
- select
字段的行为和显示。它可以有两个不同的值:
- one
最多可以选择一个值。支持的字段类型为
many2one和selection。
- multi
可以选择多个值。支持的字段类型为
many2one、many2many和selection。
- 要求
选修的
- 类型
斯特
- 默认
one
- groups
向其显示元素的用户组的逗号分隔列表。至少不属于这些组之一的用户无法看到该元素。组可以使用负
!运算符作为前缀来排除它们。Example
<field name="FIELD_NAME" groups="base.group_no_one,!base.group_multi_company"/>
- 要求
选修的
- 类型
斯特
- 默认
''
- icon
该字段的图标。
- 要求
选修的
- 类型
斯特
- 默认
''
- color
字段的颜色。
- 要求
选修的
- 类型
斯特
- 默认
''
当 field 元素设置了 select=one 属性时,它可以具有以下附加属性:
- hierarchize
子类别是否应显示在其父类别下,或者显示在同一层次结构级别。
- 要求
选修的
- 类型
布尔值
- 默认
True- 范围
Many2one字段
- depth
如果设置为非零整数,层次结构(如果有)将展开到给定的级别。
- 要求
选修的
- 类型
整数
- 默认
0- 范围
Many2one字段
当 field 元素设置了 select=multi 属性时,它可以具有以下附加属性:
- enable_counters
如果非零,是否计算并显示记录计数器。
小技巧
该属性的存在是为了避免影响性能。解决性能问题的另一种方法是重写
search_panel_select_range和search_panel_select_multi_range方法。- 要求
选修的
- 类型
布尔值
- 默认
False
- expand
是否应显示没有记录的类别和过滤器。
- 要求
选修的
- 类型
布尔值
- 默认
False
- limit
为字段获取的最大值数。如果达到限制,则搜索面板上不会显示任何值,而是显示一条错误消息。如果设置为 0,则获取所有值。
- 要求
选修的
- 类型
整数
- 默认
200
- domain
记录必须满足的条件。
Example
<searchpanel> <field name="department_id"/> <field name="manager_id" select="multi" domain="[('department_id', '=', department_id)]"/> </searchpanel>
- 要求
选修的
- 类型
- 默认
[]
- groupby
应根据其对值进行分组的字段名称。
- 要求
选修的
- 类型
斯特
- 默认
''- 范围
Many2one和Many2many字段
搜索默认值¶
Search fields and filters can be configured through the action’s context using search_default_name keys.对于字段,该值必须是要设置到该字段的值。 For filters, it must be a boolean value or a number.
Example
使用 foo`(字段)和 `bar`(过滤器),以下操作上下文将在 `acro 上搜索 foo 并默认启用 bar:
{
'search_default_foo': 'acro',
'search_default_bar': 1
}
数值(1 到 99 之间)可用于定义默认 groupby 过滤器的顺序。
Example
使用 foo 和 bar`(两个 *groupby* 过滤器),以下操作上下文将首先启用 `bar,然后启用 foo。
{
'search_default_foo': 2,
'search_default_bar': 1
}
看板¶
看板视图用作 kanban board 可视化:它们将记录显示为“卡片”,介于 list 和 form 视图之间。
记录可以按列分组以用于工作流可视化或操作(例如任务或工作进度管理),也可以取消分组(仅用于可视化记录)。
看板视图的根元素是 kanban。
可能的结构及其渲染表示
<kanban>
...
</kanban>
|
注解
看板视图加载并显示最多十列。此后的任何列都会关闭,但用户仍然可以打开。
根属性¶
可以将可选属性添加到根元素 kanban 以自定义视图。
- string
视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该信息。
- 要求
选修的
- 类型
斯特
- 默认
''
- create
禁用/启用视图上的记录创建。
- 要求
选修的
- 类型
布尔值
- 默认
True
- edit
在视图上禁用/启用记录版本。
- 要求
选修的
- 类型
布尔值
- 默认
True
- delete
通过 Action 下拉列表禁用/启用视图上的记录删除。
- 要求
选修的
- 类型
布尔值
- 默认
True
- default_group_by
如果未通过操作或当前 search 指定分组,则默认情况下应对记录进行分组的字段的名称。
- 要求
选修的
- 类型
斯特
- 默认
''
- default_order
以逗号分隔的字段名称列表,它覆盖通过
_order属性在模型上定义的顺序。要反转字段的排序顺序,请在其后缀
desc,并用空格分隔。Example
<list default_order="sequence,name desc"> ... </list>
- 要求
选修的
- 类型
斯特
- 默认
''
- class
将 HTML 类添加到视图的根 HTML 元素。
- 要求
选修的
- 类型
斯特
- 默认
''
- examples
在分组看板视图中创建新列时可以浏览的示例的
KanbanExamplesRegistry中的键。- 要求
选修的
- 类型
斯特
- 默认
''
- group_create
Add a new column 栏是否可见。
- 要求
选修的
- 类型
布尔值
- 默认
True
- group_delete
是否可以通过齿轮菜单删除列。
- 要求
选修的
- 类型
布尔值
- 默认
True
- group_edit
是否可以通过齿轮菜单编辑列。
- 要求
选修的
- 类型
布尔值
- 默认
True
- groups_draggable
列是否可以重新排序。
- 要求
选修的
- 类型
布尔值
- 默认
True
- records_draggable
看板视图分组时是否可以拖动记录。
- 要求
选修的
- 类型
布尔值
- 默认
True
- archivable
当在模型上定义
active字段时,是否可以存档和取消存档属于某一列的记录。- 要求
选修的
- 类型
布尔值
- 默认
True
- quick_create
是否可以在不切换到表单视图的情况下创建记录。
- 要求
选修的
- 类型
布尔值
- 默认
当看板视图按 Many2one、选择、字符或布尔字段分组时为
True,否则为False
- quick_create_view
使用快速创建记录时要打开的 form 视图的引用。
- 要求
选修的
- 类型
斯特
- 默认
''
- on_create
单击 Create 时调用的自定义操作。
如果设置为
'quick_create',则使用快速创建记录。如果禁用快速创建,则会调用标准创建操作。- 要求
选修的
- 类型
斯特
- 默认
''
- can_open
默认情况下,单击看板卡会在表单视图中打开相应的记录。 This behavior can be disabled by setting the attribute
can_opentoFalse.- 要求
选修的
- 类型
布尔值
- 默认
True
- highlight_color
用于为看板卡左边框着色的整数字段的名称。
- 要求
选修的
- 类型
斯特
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
成分¶
看板视图接受以下子元素:templates、field、header、progressbar。
templates:定义卡片结构¶
templates 元素用于定义构造看板卡的 QWeb templates。
为了清晰起见,一张卡的结构定义可以分为多个模板,但必须至少定义一个根 card 模板。
可以定义附加模板:menu。 If defined, it is rendered inside a dropdown that can be toggled with a vertical ellipsis (⋮) on the top right of the card.
模板以 JavaScript QWeb 编写。
<kanban>
<templates>
<t t-name="card">
<field name="name"/>
</t>
</templates>
</kanban>
警告
这些是 QWeb 模板,而不是 Owl 模板,这意味着像 t-on-click 这样的指令不可用。
领域¶
Inside those templates, the field element allows to render a field.它可以具有以下属性:
- name
要呈现的字段的名称。
- 要求
强制的
- 类型
斯特
- widget
用于表示字段的小部件。选定的小部件可以更改字段的呈现方式和/或编辑方式。它指的是注册到
fields注册表的 Javascript 实现(Owl 组件)。- 要求
选修的
- 类型
斯特
默认情况下,字段节点将替换为包含其格式化值的 span ,除非指定了 widget 属性,在这种情况下,它们的呈现和行为取决于相应的小部件。 widget 属性可以具有不同的值,包括:
- handle
允许通过拖放操作对记录重新排序,使用相应的字段作为顺序。
- kanban_color_picker
允许编辑颜色(整数)字段。与根属性
highlight_color结合,允许编辑卡片的颜色。
请参阅 Field section 以发现各种小部件及其选项。
渲染上下文¶
使用 QWeb engine 渲染的看板模板,它们有一个*渲染上下文*,这是模板中可用的一组变量,包含有用的信息和工具。以下是可用的变量:
- record
具有视图中定义的所有字段的对象。每个字段都有两个属性:
value和raw_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
指示该视图是只读的。
- 类型
布尔值
- selection_mode
选择多对一或多对多字段(在移动环境中)时是否打开看板视图。
- 类型
布尔值
- luxon
luxon 对象,允许操作日期和日期时间字段值。
- JSON
Javascript JSON 命名空间对象包含
parse方法,允许将 json 字段值解析为 Javascript 对象。
小部件¶
widget 元素允许在卡片内插入动态生成的(在 Javascript 中)html。它有一个强制的 name 属性,引用注册到 view_widgets 注册表的 Javascript 实现(Owl 组件)。
请参阅 Widget section 以发现各种小部件及其选项。
布局¶
使用标准 html 元素和 Bootstrap utility classes 可以轻松获得多种卡片布局。默认情况下,该卡为 flexbox container,方向为 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>
要在卡片侧面显示某些内容(例如图像),可以使用 aside 和 main 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 元素也可以在看板 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>
progressbar:在列顶部显示进度条¶
progressbar 元素用于定义在分组看板视图中的看板列顶部显示的进度条。
<kanban>
<progressbar field="FIELD_NAME"/>
...
</kanban>
progressbar 元素可以具有以下属性:
- field
进度条子组所基于的字段的名称。
- 要求
强制的
- 类型
斯特
- colors
进度条字段值到颜色值
muted、success、warning和danger的映射。- 要求
强制的
- 类型
- sum_field
进度条旁边显示的求和中使用的字段名称。如果未设置,则显示记录总数。
- 要求
选修的
- 类型
斯特
- 默认
''
可能的结构及其渲染表示
<kanban>
<progressbar field="activity_state"
colors="{'planned': 'success', 'today': 'warning', 'overdue': 'danger'}"
sum_field="expected_revenue"/>
<templates>
...
</templates>
</kanban>
|
control:自定义创建和删除操作¶
就像 list views 一样。
QWeb¶
QWeb 视图是视图的 arch. They don’t have a specific root element. Because QWeb views don’t have a specific root element, their type must be specified explicitly (it can not be inferred from the root element of the arch 字段内的标准 QWeb 模板 模板。
QWeb 视图有两个用例:
它们可以用作前端模板,在这种情况下 template 应用作快捷方式。
它们可以用作实际的 qweb 视图(在操作中打开),在这种情况下,它们应该被定义为具有显式“
type”(无法推断)和模型的常规视图。
qweb-as-view 对基本 qweb-as-template 的主要补充是:
qweb-as-view 有一个特殊情况,即“
<nav>`element bearing the CSS classo_qweb_cp_buttons: its contents should be buttons and will be extracted and moved to the control panel’s button area, the ``<nav>`”本身将被删除,这是控制面板视图尚不存在的解决方法qweb-as-view 渲染向标准 qweb 渲染上下文添加了几个项目:
modelqweb 视图绑定到的模型
domain搜索视图提供的域
context搜索视图提供的上下文
recordsmodel.search(domain)的惰性代理,如果您只想迭代记录而不执行更复杂的操作(例如分组),可以使用它
qweb-as-view 还提供了额外的渲染钩子:
_qweb_prepare_context(view_id, domain)准备特定于 qweb-as-view 的渲染上下文qweb_render_view(view_id, domain)is the method called by the client and will call the context-preparation methods and ultimatelyenv['ir.qweb'].render()。
图形¶
图形视图用于可视化多个记录或记录组的聚合。它的根元素是``<graph>``,它可以采用以下属性:
- ``type``(可选)
bar(default),pieandline之一,要使用的图表类型- ``stacked``(可选)
仅用于``bar`` charts. Set to ``0``以防止组内的条形最初堆叠。
- ``disable_linking``(可选)
设置为“
1”以防止将图形上的点击重定向到列表视图- ``order``(可选)
如果设置,默认情况下,x 轴值将根据其相对于给定顺序的度量进行排序(
ascordesc). Only used forbarand ``pie``图表。- ``string``(可选)
重定向到列表视图时显示在面包屑中的字符串。
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
图形视图中唯一允许的元素是“field”,它可以具有以下属性:
- ``name``(强制)
要在视图中使用的字段的名称。如果用于分组(而不是聚合)
- ``invisible``(可选)
如果为 true,则该字段将不会出现在活动度量中或可选度量中。
- ``type``(可选)
如果设置为“
measure”,该字段将用作组内的聚合值而不是分组标准。它仅适用于具有该属性的最后一个字段,但对于具有字符串属性的其他字段很有用(见下文)。- ``interval``(可选)
在日期和日期时间字段上,按指定间隔进行分组 (
day,week,month,quarteroryear) instead of grouping on the specific datetime (fixed second resolution) or date (fixed day resolution). Default ismonth。- ``string``(可选)
仅用于带有“
type="measure"”的字段。将用于在图形视图中显示字段的名称覆盖该字段的默认 python 字符串属性。
度量是从模型字段自动生成的;仅使用可聚合字段。这些度量也按字段字符串的字母顺序排序。
警告
图形视图聚合是对数据库内容执行的,非存储函数字段不能在图形视图中使用
在图形视图中,“field` can have a widget attribute to dictate its format. The widget should be a field formatter, of which the most interesting are float_time, and ``monetary`”。
<field name="working_hours_close" widget="float_time"/>
枢¶
数据透视视图用于将聚合可视化为 pivot table。它的根元素是``<pivot>``,它可以采用以下属性:
- ``disable_linking``(可选)
设置为“
1”以删除表格单元格到列表视图的链接。- ``display_quantity``(可选)
设置为
1以默认显示数量列。- ``default_order``(可选)
度量的名称以及用作视图中默认顺序的顺序(升序或降序)。
<pivot default_order="foo asc"> <field name="foo" type="measure"/> </pivot>
数据透视视图中唯一允许的元素是“field”,它可以具有以下属性:
- ``name``(强制)
要在视图中使用的字段的名称。如果用于分组(而不是聚合)
- ``string``(可选)
将用于在数据透视视图中显示字段的名称,覆盖该字段的默认 python 字符串属性。
- ``type``(可选)
指示该字段是否应用作分组标准或组内的聚合值。可能的值为:
- ``row``(默认)
按指定字段分组,每个组都有自己的行。
col创建按列分组
measure在组内聚合的字段
interval在日期和日期时间字段上,按指定间隔 (
day,week,month,quarteroryear) 分组,而不是按特定日期时间(固定第二分辨率)或日期(固定日分辨率)分组。
- ``invisible``(可选)
如果为 true,则该字段不会出现在活动度量中,也不会出现在可选度量中(对于聚合没有意义的字段很有用,例如不同单位的字段,例如欧元和美元)。
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
度量是从模型字段自动生成的;仅使用可聚合字段。这些度量也按字段字符串的字母顺序排序。
警告
与图形视图一样,数据透视表聚合数据库内容上的数据,这意味着非存储函数字段不能在数据透视表视图中使用
在数据透视表中查看“field` can have a widget attribute to dictate its format. The widget should be a field formatter, of which the most interesting are date, datetime, float_time, and monetary。
例如,时间表透视视图可以定义为:
<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>”。根节点上的可用属性有:
- date_start
保存事件开始日期的记录字段的名称。
- 要求
强制的
- 类型
斯特
- date_stop
保存事件结束日期的记录字段的名称。
- 要求
选修的
- 类型
斯特
- date_delay
date_stop的替代品。提供事件的持续时间而不是结束日期(单位:小时)。- 要求
选修的
- 类型
斯特
- scales
以逗号分隔的可用比例列表,位于``day``,
week,month, ``year``中。默认情况下,所有比例均可用。- 要求
选修的
- 类型
斯特
- 默认
"day,week,month,year"
- mode
日历的默认比例。
- 要求
选修的
- 类型
"day"、"week"、"month"或"year"- 默认
"week"
- color
用于*颜色分段*的记录字段的名称。相同颜色段中的记录在日历中分配相同的突出显示颜色。
- 要求
选修的
- 类型
斯特
- all_day
记录的布尔字段的名称,指示相应的事件是否标记为全天,在这种情况下,持续时间不相关。
- 要求
选修的
- 类型
斯特
- aggregate
用于在过滤器侧面板中的过滤器旁边显示聚合值的记录字段的名称。可以明确给出聚合器(例如
aggregate="expected_revenue:sum")。如果未给出,则使用该字段的聚合器。支持的聚合器有sum、avg、min、max、count和count_distinct。- 要求
选修的
- 类型
斯特
- event_limit
限制日历单元格中以
month比例显示的事件数量,以及以week和day比例显示的全天事件数量。如果事件数量超过限制,则会添加“更多”按钮以在弹出窗口中显示其余事件。- 要求
选修的
- 类型
整数
- 默认
5
- show_unusual_days
如果设置为真正的周末和公共假期,背景将呈灰色。
- 要求
选修的
- 类型
布尔值
- 默认
False
- hide_date
将其设置为 true 可隐藏记录弹出窗口中的日期部分。
- 要求
选修的
- 类型
布尔值
- 默认
False
- hide_time
将其设置为 true 可隐藏记录弹出窗口中的时间部分。
- 要求
选修的
- 类型
布尔值
- 默认
错误的
- month_overflow
默认情况下,在月份模式下,会显示上个月的最后一天和下个月的第一天及其事件。此选项允许禁用此功能,以便那些同级日显示为灰色并且不显示它们的事件。
- 要求
选修的
- 类型
布尔值
- 默认
True
- show_date_picker
默认情况下,迷你日历(月份模式)显示在侧面板中主日历旁边。此选项允许通过将其设置为
False来删除它。- 要求
选修的
- 类型
布尔值
- 默认
True
- event_open_popup
如果为 true,则在对话框中打开事件来编辑它们,否则,在经典表单视图中打开它们。
- 要求
选修的
- 类型
布尔值
- 默认
False
- form_view_id
用户创建或编辑事件时打开的视图。默认情况下,使用当前操作的表单视图(如果有)。
- 要求
选修的
- 类型
整数
- quick_create
在单击时启用快速事件创建:仅询问用户“
name”,并尝试仅使用该值和单击的事件时间创建新事件。如果快速创建失败,则返回完整表单视图。- 要求
选修的
- 类型
布尔值
- 默认
True
- create_name_field
保存记录显示名称的记录字段的名称。通过“快速创建”机制创建记录时使用此字段。
- 要求
选修的
- 类型
斯特
- 默认
name
- quick_create_view_id
设置属性“
quick_create”并且用户创建事件时打开的表单视图的 ID,而不是仅允许指定名称的默认对话框。- 要求
选修的
- 类型
整数
- multi_create_view
表单视图的参考。设置后,在**月**范围内,允许通过单击日历单元格或选择日历单元格区域来批量创建(和删除)记录。然后,为每个选定的单元格和每个活动过滤器的值创建一条记录,并使用显示在侧面板中的多重创建表单视图的值。在删除模式下,所选单元格中显示的所有记录都将被删除。
注意:如果侧面板包含多个过滤器部分,则仅使用第一个过滤器部分,以避免组合爆炸。
- 要求
选修的
- 类型
斯特
- create
禁用/启用视图上的记录创建。
- 要求
选修的
- 类型
布尔值
- 默认
True
- edit
在视图上禁用/启用记录版本。
- 要求
选修的
- 类型
布尔值
- 默认
True
- delete
禁用/启用视图上的记录删除。
- 要求
选修的
- 类型
布尔值
- 默认
True
- string
视图标题。仅当您打开一个没有名称且目标为 `new`(打开对话框)的操作时,才会显示该信息。
- 要求
选修的
- 类型
斯特
- 默认
''
成分¶
日历视图接受单一类型的子元素:<field>。这些字段按给定顺序显示在弹出窗口中,单击记录(日历事件)时会打开该弹出窗口。
注解
弹出窗口中的字段是只读的。如果 edit 操作可用,则弹出窗口中会显示 Edit 按钮,以打开可编辑字段的表单视图。
字段节点可以具有以下属性:
- name
要呈现的字段的名称。
- 要求
强制的
- 类型
斯特
- widget
用于表示字段的小部件。选定的小部件可以更改字段的呈现方式和/或编辑方式。它指的是注册到
fields注册表的 Javascript 实现(Owl 组件)。- 要求
选修的
- 类型
斯特
- invisible
Python 表达式,指示是否应显示该字段。模型的其他字段可以在表达式中使用,只要这些字段也在此处声明即可。
- 要求
选修的
- 类型
- 默认
False
- options
Python 表达式对字段的选项对象进行编码。特别是,选项
icon允许指定要在弹出窗口中的字段前面显示的图标作为类名(例如fa fa-users)。如果没有给出图标,则可以设置选项`string`,然后将其值用作标签,显示在字段前面。- 要求
选修的
- 类型
- 默认
{}
指定 <field> in a calendar arch also allows to customize the filter side panel, by setting the filters 属性。然后可以使用额外的属性:
- filters
如果设置为 true,则该字段可以从日历的侧面板用作过滤器。
- 要求
选修的
- 类型
布尔值
- 默认
False
- avatar_field
仅适用于关系字段。指定联合模型上的字段名称,用于在侧面板过滤器中的字段值前面显示为头像。
- 要求
选修的
- 类型
斯特
- color
指定使用哪个字段为侧面板过滤器中的复选框着色。默认情况下,日历视图的颜色属性用于将事件与过滤器中的值进行匹配。
- 要求
选修的
- 类型
斯特
- write_model
允许动态创建新的过滤器值。然后将给定的模型用作这些过滤器的模型。 与
write_field结合。- 要求
选修的
- 类型
斯特
- write_field
与
write_model结合使用,指定给定模型中用于对过滤器值进行编码的字段名称。- 要求
选修的
- 类型
斯特
- filter_field
与
write_model组合,指定给定模型中的字段名称,用于对过滤器的状态进行编码(无论是否选中)。- 要求
选修的
- 类型
斯特
活动¶
活动视图用于显示链接到记录的活动。数据显示在图表中,其中记录构成行,活动类型构成列。每行的第一个单元格显示一个(可自定义,请参阅“templates”,与 看板 非常相似)代表相应记录的卡片。单击其他单元格时,将显示记录中相同类型的所有活动的详细描述。
警告
活动视图仅在“mail` module is installed, and for the models that inherit from the ``mail.activity.mixin`”时可用。
Activity 视图的根元素是``<activity>``,它接受以下属性:
- ``string``(强制)
标题,应该描述视图
视图元素的可能子元素有:
field声明要在活动*逻辑*中使用的字段。如果该字段只是显示在活动视图中,则不需要预先声明。
可能的属性有:
- ``name``(必填)
要获取的字段的名称
templates定义 QWeb 模板 模板。为了清晰起见,卡定义可以分为多个模板,但活动视图*必须*定义至少一个根模板“
activity-box”,该模板将为每条记录渲染一次。活动视图使用大多数标准的 javascript qweb 并提供以下上下文变量(有关更多详细信息,请参阅 看板 ):
widget当前:js:class:
ActivityRecord,可用于获取一些元信息。这些方法也可以直接在模板上下文中使用,不需要通过``widget``访问record一个对象,其属性包含所有请求的字段。每个字段有两个属性``value`` and
raw_value
队列¶
Enterprise feature队列视图用于显示和了解某些数据在一段时间内的变化方式。 例如,假设对于给定的业务,客户可以订阅某些服务。 然后,群组视图可以显示每月的订阅总数,并研究客户离开服务(流失)的比率。单击某个单元格时,队列视图会将您重定向到一个新操作,在该操作中您只能看到该单元格时间间隔中包含的记录;该操作包含一个列表视图和一个表单视图。
注解
默认情况下,群组视图将使用与操作中定义的相同的列表和表单视图。您可以将列表视图和表单视图传递到操作的上下文,以便设置/覆盖将使用的视图(要使用的上下文键是 form_view_id 和 list_view_id)
例如,这是一个非常简单的群组视图:
<cohort string="Subscription" date_start="date_start" date_stop="date" interval="month"/>
Cohort 视图的根元素是 <cohort>,它接受以下属性:
- ``string``(强制)
标题,应该描述视图
- ``date_start``(强制)
有效的日期或日期时间字段。该字段被视图理解为记录的开始日期
- ``date_stop``(强制)
有效的日期或日期时间字段。该字段被视图理解为记录的结束日期。 这是决定流失率的字段。
- ``disable_linking``(可选)
设置为“
1”以防止将群组单元格上的点击重定向到列表视图。- ``mode``(可选)
描述模式的字符串。它应该是“流失”或“保留”(默认)。流失模式将从 0% 开始,并随着时间的推移而累积,而保留模式将从 100% 开始,并随着时间的推移而减少。
- ``timeline``(可选)
描述时间线的字符串。它应该是“向后”或“向前”(默认)。正向时间线将显示从 date_start 到 date_stop 的数据,而向后时间线将显示从 date_stop 到 date_start 的数据(当 date_start 将来/大于 date_stop 时)。
- ``interval``(可选)
描述时间间隔的字符串。它应该是“日”、“周”、“月”(默认)或“年”。
- ``measure``(可选)
可以聚合的字段。 该字段将用于计算每个单元格的值。 如果未设置,队列视图将计算出现的次数。
- ``<field>``(可选)
允许指定特定字段以便从可用度量中管理它,它的主要用途是从可选度量中隐藏字段:
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
网格¶
Enterprise feature局限性¶
此视图是一项正在进行的工作,可能需要扩展或更改。
只有
datecolumn fields have been tested,selectionandmany2oneare nominally implemented and supported but have not been tested,datetime根本没有实现。列单元格很难配置并且必须是数字
小区调整默认处于禁用状态,必须配置为启用
create,editanddeleteACL metadata doesn’t get automatically set on the view root due to limitations infields_view_get后处理(有一个获取这些属性的视图类型的固定显式列表)
模式¶
网格视图在此模块中有自己的架构和附加验证。视图架构是:
<grid>(1)架构根元素
强制
string属性可选``create``,
editand ``delete``属性可选的``adjustment`` and ``adjust_name``属性
adjustmentcan be eitherobjectoractionto indicate whether a cell’s adjustment should be performed through a method call or an action execution.adjust_name分别提供方法名称和操作 id。在这两种情况下,调整参数都以“
grid_adjust`context member, in the ``object`”的形式提供,这些参数也以位置函数参数的形式提供(在空的 id 列表旁边):row_domain与调整单元格的整行匹配的域
column_field调整后的单元格的列名称
column_value调整后的单元格的列值
cell_field调整后单元格的测量字段
change单元格的旧值与调整后的值之间的差异,可能是正值,也可能是负值
可选的``hide_line_total`` and ``hide_column_total``属性
hide_line_total设置为 true 以隐藏总行(默认 false)
hide_column_total设置为 true 以隐藏总计列(默认 false)
可选的``barchart_total``属性
barchart_total设置为
true以便根据列的总数在网格底部显示条形图(默认 false)。
可选的``create_inline`` and ``display_empty``属性
create_inline设置为``true`` in order to display an additional row at bottom of the grid with an
Add a linebutton (default false). When this option is set totrue, theAdd a linebutton from the control panel is hidden. When no data is available and whendisplay_emptyis not set (so when the help content is displayed), the the ``Add a line``按钮从控制面板显示,以便让用户创建第一条记录。display_empty设置为
true以便在没有数据时继续显示网格(默认 false)。当您希望用户能够跟踪当前期间(因为日期显示在列标题中)时,这非常有用。提醒一下,当不存在数据且未设置此属性时,将显示帮助内容而不是网格。
<button>(0+)常规 Odoo 操作按钮,显示在视图标题中
强制
string属性(按钮标签)强制
typeattribute, eitherobjectoraction注解
不支持工作流程按钮
强制``name``属性,要么是要调用的方法的名称,要么是要执行的操作的ID
可选``context``
服务器回调提供了视图中显示的所有记录 ID,或者作为传递给方法的 ID(
objectbutton) or as the context’sactive_ids(action按钮)<field type="row">(1+)行分组字段将被搜索视图的 groupby 过滤器(如果有)替换。
每个学校内“
row`fields in the view provides their grouping depth: if the first field isschooland the second isagethe records will be grouped byschoolfirst and by ``age`”的顺序。<field type="col">(1)列分组字段。
col 字段可以包含 0+ 个
<range>elements which specify customisable column ranges.range元素,具有以下强制属性<field type="measure">(1)单元格字段,自动累积(通过``read_group``)。
度量字段可以采用“
widget”属性来自定义其显示。
服务器交互¶
除了可选按钮之外,网格视图当前还调用两种方法:
read_grid(由模块在所有模型上提供)以字典形式返回几乎整个网格内容:行标题是具有以下键的字典列表:
列标题是至少包含一个键的字典列表:
网格数据作为单元格字典(单元格)列表(行)的列表,每个单元格字典具有以下键:
value与单元格关联的数值
domain与单元记录匹配的域(应假设不透明)
size单元格中分组的记录数
- ``readonly``(可选)
一个布尔值,指示该特定单元格不应由客户端编辑
- ``classes``(可选)
要添加到单元格容器(单元格的 TD 和单元格的潜在可编辑元素之间)的类列表(作为字符串)。
如果此列表与基类(前缀为“
o_grid_cell_”)之间发生冲突,则忽略此列表中的类。
请注意,网格数据是*密集的*,如果查询数据库没有产生与单元格匹配的组,则单元格将生成一个“空”单元格,其中包含所需键的默认值。
prevandnextwhich can be either falsy (no pagination) or a context item to merge into the view’s own context toread_grid上一页或下一页,应假定为不透明
read_grid_domain(field, range)(provided on al models by the module) returns the domain matching the current configured “span” of the grid. This is also done internally byread_grid, but can be useful or necessary to call independently to use with separate e.g.search_countorread_group。adjust_grid,目前还没有全面的实现,其语义可能会随着时间和用例的变化而发展
服务器挂钩¶
read_grid 调用许多钩子,允许从内部自定义其操作,而不必覆盖整个方法:
_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) or used query and reformatread_groupintoread_grid的一部分:grouping列的实际分组字段/查询
domain如果列字段已分页,则应用于“
read_group”的域,可以是空列表prevandnext将发送到“
read_grid`for pages before and after the current one. If ``False`”的上下文段,禁用该方向的分页values要在“当前页面”上显示的列值,每个值都是具有以下键的字典:
values字典将字段名称映射到整个列的值,通常只是
name-> 一个值domain与该特定列匹配的域
is_current否则``True`` if the current column should be specifically outlined in the grid,
Falseformat如何格式化ColumnInfo中``read_group`` formatting to
read_gridformatting (matching ``values``中该列/类型的值)
前交叉韧带¶
如果视图不可编辑,则单个单元格将不可编辑
如果视图不可创建,则不会显示``Add a Line``按钮(它当前创建一个新的空记录)
上下文键¶
grid_range如果视图有多个范围,则选择默认情况下应使用的范围
grid_anchor如果适用,用作列范围的默认锚点,而不是“
read_grid”定义为其默认值的任何内容。对于日期字段,将计算初始跨度的参考日期。默认日期锚点是“今天”(在用户的时区中)
甘特图¶
Enterprise feature甘特视图适当地显示甘特图(用于计划)。
甘特视图的根元素是“<gantt/>”,它没有子元素,但可以采用以下属性:
- 细绳
字符串(默认值:
'')仅当您打开没有名称且目标为“新”的操作(打开对话框)时,才会显示此视图标题
- 创造
布尔值(默认值:
True)禁用/启用视图上的记录创建。
- 编辑
布尔值(默认值:
True)在视图上禁用/启用记录版本。
- 删除
布尔值(默认值:
True)通过 操作 下拉列表禁用/启用视图上的记录删除。
- ``date_start``(必填)
提供每条记录的事件开始日期时间的字段名称。
- ``date_stop``(必填)
提供每条记录的事件结束持续时间的字段名称。
dependency_fieldmany2manyfield that provides the dependency relation between two records. If B depends on A,dependency_fieldis the field that allows getting A from B. Both this field anddependency_inverted_field字段的名称用于绘制药丸之间的依赖关系箭头并重新安排它们。- 提供了``dependency_inverted_field`` (required if
dependency_field) many2manyfield that provides the invert dependency relation thandependency_field. If B depends on A,dependency_inverted_field的名称是允许从 A 获取 B 的字段。color用于根据药丸的值为其着色的字段名称
decoration-{$name}python expression 计算结果为布尔值
允许根据相应记录的属性更改单元格文本的样式。
{$name}can be one of the following 引导上下文颜色 (danger,info,secondary,successorwarning)。根据相应记录的属性,以行文本的样式定义记录的条件显示。
值是 Python 表达式。对于每条记录,都会使用记录的属性作为上下文值来计算表达式,如果为“
true”,则将相应的样式应用于该行。以下是上下文中可用的一些其他值:uid:当前用户的id,today: the current local date as a string of the formYYYY-MM-DD,now: same astodaywith the addition of the current time. This value is formatted asYYYY-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`(default: ``true`”,允许 dis在视图中启用相应的操作。控制面板中将提供“
create`: If enabled, an ``Add`”按钮来创建记录。启用``cell_create``: If enabled and
create,将鼠标悬停在时隙单元格上时将显示“+”按钮,以在该时隙上创建新记录。edit:如果启用,打开的记录将处于编辑模式(因此可编辑)。启用``plan``: If enabled and
edit,时隙上将显示“放大镜”按钮,以将未分配的记录计划到该时隙中。
Example
当您不想在甘特视图上创建记录并且模型上需要开始日期和结束日期时,应禁用计划功能,因为永远找不到记录。
offset根据规模,今天添加到计算默认期间的单位数量。示例:default_scale 周中的偏移量 +1 将打开下周的甘特视图,default_scale 月中的偏移量 -2 将打开 2 个月前的甘特视图。
progress提供记录事件完成百分比的字段名称,介于 0 到 100 之间
string甘特视图的标题
precisionJSON 对象指定每个比例中药丸的捕捉精度。
比例尺``day`` are (default: ``hour``的可能值:
hour:记录时间调整为整点(例如:7:12 变为 8:00)hour:half:记录时间缩短为半小时(例如:7:12 变为 7:30)hour:quarter:记录时间缩短为半小时(例如:7:12 变为 7:15)
比例尺``week`` are (default: ``day:half``的可能值:
day:记录时间捕捉到全天(例如:上午 7:28 变为前一天的下午 11:59:59,晚上 10:32 变为当天的下午 12:00)day:half:记录时间缩短为半小时(例如:上午 7:28 变为下午 12:00)
比例尺``month`` are (default: ``day:half``的可能值:
day:记录时间捕捉到全天(例如:上午 7:28 变为前一天的下午 11:59:59,晚上 10:32 变为当天的下午 12:00)day:half:记录时间缩短为半小时(例如:上午 7:28 变为下午 12:00)
刻度“
year”始终捕捉到全天。精度属性示例:
{"day": "hour:quarter", "week": "day:half", "month": "day"}total_row布尔值来控制是否应显示包含记录总数的行。 (默认值:
false)collapse_first_level布尔值,用于控制是否可以折叠按一个字段分组的每一行。 (默认值:
false,按两个字段分组时开始折叠)display_unavailability布尔值来标记“
gantt_unavailability`function of the model as available inside the gantt view. Records can still be scheduled in them, but their unavailability is visually displayed. (default: ``false`”返回的日期)default_scale渲染视图时的默认比例。可能的值为(默认值:
month):dayweekmonthyear
scales此视图允许的比例的逗号分隔列表。默认情况下,允许所有比例。有关此列表中可能使用的比例值,请参阅“
default_scale”。templates定义 QWeb 模板 模板
gantt-popover当用户将鼠标悬停在甘特视图中的记录之一上时使用该模板。甘特视图主要使用标准 javascript qweb 并提供以下上下文变量:
widget当前:js:class:
GanttRow,可用于获取一些元信息。getColormethod to convert in a color integer is also available directly in the template context without usingwidget。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 字典,其中键是活动模型上字段的名称。值是保存相关模型上的缩略图的字段的名称。
示例:任务有一个引用 res.users 的字段 user_id。 res.users 模型有一个包含头像的字段图像,那么:
<gantt date_start="date_start" date_stop="date_stop" thumbnails="{'user_id': 'image_128'}" > </gantt>
按 user_id 分组时,将在用户姓名旁边显示用户头像。
- sample
如果没有找到当前模型的样本记录,是否应使用一组样本记录填充视图。
这些虚假记录对某些字段名称/模型具有启发式作用。例如,模型
res.users上的字段display_name将填充样本人名,而email字段将采用firstname.lastname@sample.demo形式。用户无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),它们就会被丢弃。
- 要求
选修的
- 类型
布尔值
- 默认
False
地图¶
Enterprise feature该视图能够在地图上显示记录以及它们之间的路线。记录由引脚表示。它还允许在与记录的 pin 相关的弹出窗口中可视化模型中的字段。
注解
应用视图的模型应包含 res.partner Many2one,因为视图依赖 res.partner 的地址和坐标字段来本地化记录。
应用程序编程接口¶
该视图使用位置数据平台的 API 来获取图块(地图的背景)、进行地理转发(将地址转换为一组坐标)并获取路线。该视图实现了两个 API:OpenStreetMap 和 MapBox。默认情况下使用 OpenStreetMap,并且能够获取 tiles 并执行 geoforwarding。此 API 不需要令牌。一旦在常规设置中提供了有效的 MapBox 令牌,视图就会切换到 MapBox API。该 API 速度更快并且允许计算路线。可以通过 signing up 到 MapBox 获取令牌。
结构件¶
视图的根元素是“<map>”。它可以具有以下属性:
res_partner包含
res.partnerMany2one。如果未提供,视图将创建一个空地图。default_order如果提供了字段,视图将覆盖模型的默认顺序。该字段必须是应用视图的模型的一部分,而不是来自
res.partner。routing如果
1display the routes between the records. The view needs a valid MapBox token and at least two located records (i.e the records have ares.partnerMany2one 并且合作伙伴有地址或有效坐标)。hide_name如果``1`` hide the name from the pin’s popup (default:
0)。hide_address如果``1`` hide the address from the pin’s popup (default:
0)。hide_title如果``1`` hide the title from the pin list (default:
0)。panel_title显示为引脚列表标题的字符串。如果未提供,则标题是操作的名称,如果视图不在操作中,则标题是“项目”。
limit要获取的最大记录数(默认值:
80)。它必须是一个正整数。
<map> element can contain multiple <field> elements. Each <field> 元素被解释为引脚弹出窗口中的一行。该字段的属性如下:
name要显示的字段。
string显示在字段内容之前的字符串。它可以用作描述。
- 例如,这是一张地图:
<map res_partner="partner_id" default_order="date_begin" routing="1" hide_name="1"> <field name="partner_id" string="Customer Name"/> </map>