You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo表单测试报错:AssertionError: field_name未在视图中找到

Odoo测试中Form赋值带groups字段报错的解决办法

问题原因

field_name字段的视图定义里加了groups="base.group_no_one",而base.group_no_one是Odoo的特殊用户组,默认没有任何用户属于这个组。测试时当前用户没有该组权限,Form类是模拟前端视图渲染逻辑的,会判定这个字段不在视图范围内,因此抛出AssertionError: field_name was not found in the view错误。

解决办法

  • 临时给测试用户加权限
    在创建Form对象前,给当前测试用户添加base.group_no_one组权限,操作完成后恢复原有组,避免影响其他测试:

    # 保存用户原有组
    original_groups = self.env.user.groups_id
    # 添加目标权限组
    self.env.user.groups_id += self.env.ref('base.group_no_one')
    
    # 执行Form赋值操作
    my_form = Form(self.env['my.model'])
    my_form.field_name = 'test'
    record = my_form.save()
    
    # 恢复用户原有组
    self.env.user.groups_id = original_groups
    
  • 绕过Form直接操作记录
    如果不需要模拟前端视图交互,直接创建或写入记录即可,不受视图权限限制:

    # 直接创建新记录并赋值
    record = self.env['my.model'].create({'field_name': 'test'})
    
    # 或者更新已有记录
    record.write({'field_name': 'test'})
    
  • 修改视图权限(测试环境可选)
    如果测试场景需要该字段对普通用户可见,可临时修改视图的groups属性,比如改为测试用户所属的组,或者直接移除groups修饰符:

    <!-- 修改为普通用户组 -->
    <field name="field_name" groups="base.group_user"/>
    <!-- 或者移除权限限制 -->
    <field name="field_name"/>
    

内容的提问来源于stack exchange,提问作者Alesis Joan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:35:55