前面我们创建了一个任务清单模型通过菜单项在用户界面中显示,接下来我们为它创建两个基本视图:列表视图和表单视图。
列表视图
创建列表视图步骤如下:
点击设置>技术>用户界面>视图,
点击创建按钮进入视图编辑页面,填入如下值:
- 视图名称: To-do List View
- 视图类型: 树形
- 模型: x_todo_item
2、在结构标签下,使用 XML 书写视图的结构,代码如下:
<tree>
<field name="x_name" />
<field name="x_is_done" />
</tree>
列表视图的基本结构非常简单:一个包含列表视图中显示的一个或多个数据列的元素(element)。
效果如下:
表单视图
创建表单视图的步骤如下:
1、创建另一条视图记录,并填入如下值:
- 视图名称: To-do Form View
- 视图类型: 表单
- 模型: x_todo_item
2、在结构标签下, 输入如下XML 代码:
<form>
<group>
<field name="x_name" />
<field name="x_is_done" />
<field name="x_work_team_ids"
widget="many2many_tags"
context="{'default_x_is_work_team': True}" />
</group>
</form>
表单视图结构根节点有一个元素,包含元素。这里还有一个针对工具组字段的小组件(widget),以标签按钮而非列表栏显示。这一个按钮状标签通过在工作组字段中添加 widget 属性来实现。
默认情况下,关联字段允许直接创建记录用作关联。也就说可以在工作组字段中直接创建用户,但如果这么做用户将不会带有Is Work Team? 标记,也就产生了不一致性。
为了更好的用户体验,在这种情况下我们可以默认就带有这一标记。这需要通过 context 属性来实现,它向下一个视图传递 session 信息,比如要使用的默认值。在后续章节中会就此进行探讨,现在只要知道这是一个键值对的字典即可。以 default_作为前缀来提供对应字段的默认值。
所以此处要为用户设置Is Work Team? 标记所需的表达式为{‘default_x_is_work_team’: True}。
效果如下:
搜索视图
我们可以为列表视图右上角的搜索框预设一些过滤项和分组选项,Odoo 把这也视为视图元素,所以可以像列表视图和表单视图一样在 Views 中添加记录来定义。想必现在大家已经非常熟悉了,在菜单中点击设置>技术> 用户界面>视图或在开发者工具中对应上下文中进行编辑操作均可。我们进入任务清单列表视图,点击开发者工具中的编辑搜索视图。
当前列表清单模型还未定义过任何搜索视图,所以显示一个空表单用于进行创建,填入如下值并保存:
- 视图名称:选择一个有意义的描述,此处使用To-do Items Filter
- 视图类型: 搜索
- 模型: x_todo_item
- 结构: 添加如下XML 代码:
<search>
<filter name="item_not_done"
string="Not Done"
domain="[('x_is_done', '=', False)]" />
</search>
此时重载任务清单,可以在搜索框下方筛选按钮下选择预设的 Not Done 过滤器,
在搜索框中输入 Not Done也会提示过滤条件。
默认开启过滤器会较便捷,在不需要时取消过滤即可。正如默认字段值一样,还是使用 context 属性来设置默认过滤器。
在点击 To-do 菜单时,执行一个窗口操作打开列表视图,该操作可设置一个上下文值,让视图默认开启某一搜索过滤器,操作步骤如下:
-
点击To-do 菜单进入任务清单列表
-
点击开发者工具图标并选择编辑动作,
这时将弹出一个窗口操作界面,在右下角有一个筛选版块,这里有域值和上下文值字段。域值字段可用于为所显示记录设置固定的过滤器,而且用户无法删除。这不符合我们的场景。我们只是要默认开启item_not_done过滤器,用户可以随时取消选择。默认打开过滤器,添加以search_default_作为前缀的上下文值键,这里使用{‘search_default_item_not_done’:True}
这时再点击 To-do 菜单,搜索框中默认就会开启 Not Done 过滤器。
关闭默认过滤器
视频演示:
http://ctdrive.tderp.com/file/13502532-461163653