Odoo 19 技术视图详解
视图是 Odoo 系统的核心组成部分,决定了用户与系统数据记录的交互方式。根据实际业务需求,用户可使用详情表单视图查看/编辑单条数据、列表视图批量浏览多条记录,或是看板视图打造可视化工作流。
本文将以 Odoo 19 为例,搭建一套简易的产品管理模块,依次实现表单视图、列表视图、看板视图,同时讲解如何运用上下文传递参数,让系统交互变得更加动态灵活。
阅读完本文后,你将掌握一套通用基础架构,可直接复用至各类自定义模块开发中。
了解 Odoo 各类视图
Odoo 支持多种视图类型,每种视图都有其专属用途:
- 表单视图:适用于查看、编辑单条记录的完整信息。
- 列表视图:以表格形式展示数据,便于快速查阅多条记录。
- 看板视图:采用卡片式布局,适合以可视化方式整理、管理数据记录。
视图的选择需结合业务流程与用户的数据交互场景而定。
了解 Odoo 上下文
Odoo 中的上下文本质是一个 Python 字典,用于在动作、视图和模型之间传递临时数据。
上下文的常用应用场景:
- 新建记录时设置默认值
- 自动应用筛选条件
- 动态对数据进行分组
- 在不同页面间传递临时信息
上下文常用命名规则:
- default_字段名:设置字段默认值
- search_default_筛选器名:启用默认搜索筛选器
- group_by:自动对记录分组
步骤一:模块目录结构
本次创建名为 simple_product 的简易模块,目录结构如下:
simple_product/ +-- __init__.py +-- __manifest__.py +-- models/ +-- views/ +-- security/
从项目初期就规范文件目录,能大幅降低后续二次开发与定制的难度。
步骤二:创建数据模型
该模型包含产品名称、价格、分类、状态、描述等基础字段。
from odoo import models, fields, api
class SimpleProduct(models.Model):
_name = 'simple.product'
_description = 'Simple Product'
name = fields.Char(required=True)
price = fields.Float()
category = fields.Selection([
('electronics', '电子产品'),
('clothing', '服饰'),
('food', '食品'),
('books', '图书')
], required=True)
status = fields.Selection([
('available', '有库存'),
('out_of_stock', '缺货')
], default='available')
description = fields.Text()
@api.model
def default_get(self, fields_list):
"""可选方法:演示上下文的使用方式"""
res = super().default_get(fields_list)
if self.env.context.get('default_category'):
res['category'] = self.env.context['default_category']
if self.env.context.get('default_status'):
res['status'] = self.env.context['default_status']
return res
关于 default_get() 方法说明
示例中的 default_get() 为可选方法。
若通过上下文使用 default_字段名 传参,Odoo 会自动解析并赋值;当你需要在字段赋值前增加额外逻辑或判断条件时,该方法就会发挥作用。
步骤三:创建表单视图
表单视图供用户新建、编辑产品的完整信息。
<form>
<sheet>
<group>
<field name="name"/>
<field name="price"/>
<field name="category"/>
<field name="status"/>
</group>
<group>
<field name="description"/>
</group>
</sheet>
</form>
该布局将关联字段分组展示,界面清晰易读。
步骤四:创建列表视图
列表视图适合批量查看多条数据记录。
<list decoration-success="status == 'available'"
decoration-danger="status == 'out_of_stock'">
<field name="name"/>
<field name="price"/>
<field name="category"/>
<field name="status"/>
</list>
视图中使用记录样式修饰功能,可通过颜色区分数据状态,无需点开详情页就能快速识别记录状态。
步骤五:创建看板视图
看板视图以可视化卡片形式展示数据。
<kanban default_group_by="category">
<field name="name"/>
<field name="price"/>
<field name="category"/>
<field name="status"/>
<field name="description"/>
<templates>
<t t-name="card">
<div class="d-flex flex-column gap-2">
<div class="d-flex justify-content-between">
<strong><field name="name"/></strong>
<span><field name="category"/></span>
</div>
<div>
<field name="description"/>
</div>
<div>
价格:<field name="price"/>
</div>
<div>
<field name="status"
widget="label_selection"
options="{'classes': {
'available': 'success',
'out_of_stock': 'danger'
}}"/>
</div>
</div>
</t>
</templates>
</kanban>
Odoo 19 看板视图开发注意事项
- 卡片模板固定使用 t-name="card"
- 弃用已淘汰的 kanban-box 写法
- 不再使用 kanban_color() 方法
- 所有需展示的字段,必须在 <kanban> 根标签下先行声明
遵循以上规范,可有效避免视图报错。
步骤六:配置带上下文的窗口动作
动作用于定义记录的打开方式与展示视图。
<record id="action_product_electronics" model="ir.actions.act_window">
<field name="name">电子产品</field>
<field name="res_model">simple.product</field>
<field name="view_mode">list,form,kanban</field>
<field name="context">
{
'default_category': 'electronics',
'default_status': 'available'
}
</field>
<field name="domain">[('category', '=', 'electronics')]</field>
</record>
代码说明:
- 域(domain):限定页面仅展示电子产品类数据
- 上下文(context):新建记录时自动填充预设字段值
步骤七:上下文常用用法
1. 设置字段默认值
'context': {'default_category': 'electronics'}
2. 启用默认搜索筛选器
'search_default_available': 1
该用法需要提前配置搜索视图。
域与上下文搭配使用
二者经常组合使用,但作用完全不同:
- 域(Domain):控制页面展示哪些数据记录
- 上下文(Context):控制系统的运行逻辑与交互行为
步骤八:创建菜单选项
<menuitem id="menu_product_root" name="产品管理"/>
<menuitem id="menu_product_electronics"
name="电子产品"
parent="menu_product_root"
action="action_product_electronics"/>
菜单是用户进入模块功能的导航入口。
步骤九:配置安全访问权限
权限文件(csv格式)内容:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_simple_product_user,simple.product.user,model_simple_product,base.group_user,1,1,1,1
若未配置访问规则,用户将无法打开和管理数据记录。
视图不只是 Odoo 的展示页面,更直接影响用户的日常数据操作体验:设计合理的表单视图能提升数据录入效率,列表视图便于快速浏览数据,看板视图则能打造直观的可视化工作流。
而上下文为系统带来了更强的灵活性,仅通过设置默认值、启用筛选器这类简单配置,就能简化重复操作、优化使用体验。
掌握视图与上下文的结合用法后,你就能开发出实用性更强、使用更便捷的自定义模块。