Skip to Content

Odoo19 表单/列表/看板视图开发 + 上下文实操

Odoo 19 技术视图详解

视图是 Odoo 系统的核心组成部分,决定了用户与系统数据记录的交互方式。根据实际业务需求,用户可使用详情表单视图查看/编辑单条数据、列表视图批量浏览多条记录,或是看板视图打造可视化工作流。

本文将以 Odoo 19 为例,搭建一套简易的产品管理模块,依次实现表单视图、列表视图、看板视图,同时讲解如何运用上下文传递参数,让系统交互变得更加动态灵活。

阅读完本文后,你将掌握一套通用基础架构,可直接复用至各类自定义模块开发中。

了解 Odoo 各类视图

Odoo 支持多种视图类型,每种视图都有其专属用途:

  • 表单视图:适用于查看、编辑单条记录的完整信息。
  • 列表视图:以表格形式展示数据,便于快速查阅多条记录。
  • 看板视图:采用卡片式布局,适合以可视化方式整理、管理数据记录。

视图的选择需结合业务流程与用户的数据交互场景而定。

了解 Odoo 上下文

Odoo 中的上下文本质是一个 Python 字典,用于在动作、视图和模型之间传递临时数据。

上下文的常用应用场景:

  1. 新建记录时设置默认值
  2. 自动应用筛选条件
  3. 动态对数据进行分组
  4. 在不同页面间传递临时信息

上下文常用命名规则:

  • 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 看板视图开发注意事项

  1. 卡片模板固定使用 t-name="card"
  2. 弃用已淘汰的 kanban-box 写法
  3. 不再使用 kanban_color() 方法
  4. 所有需展示的字段,必须在 <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 的展示页面,更直接影响用户的日常数据操作体验:设计合理的表单视图能提升数据录入效率,列表视图便于快速浏览数据,看板视图则能打造直观的可视化工作流。

而上下文为系统带来了更强的灵活性,仅通过设置默认值、启用筛选器这类简单配置,就能简化重复操作、优化使用体验。

掌握视图与上下文的结合用法后,你就能开发出实用性更强、使用更便捷的自定义模块。

Odoo19 表单/列表/看板视图开发 + 上下文实操
中国 Odoo, 苏州远鼎 June 16, 2026
Tags
Archive