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

加载演示数据时无法创建Partner的惯用技术解决方案咨询

解决方案

针对Odoo模块安装时因权限组未分配导致演示数据创建失败的问题,以下是几种惯用的技术解决方法:


1. 跳过演示数据/安装模式下的权限校验

在create方法中增加判断,当处于模块安装模式或加载演示数据时,跳过权限校验。Odoo会在安装模块或加载演示数据时自动在上下文中传入install_mode或demo标志,利用这一点修改代码:

@api.model
def create(self, vals_list):
    # 仅在非安装/非演示数据场景下校验权限
    if not self.env.context.get('install_mode') and not self.env.context.get('demo'):
        if not self.env.user.has_group('some-project.group_super') and not self.env.user.has_group('some-project.group_some_role'):
            raise ValidationError("Some error message.")
    vals_list['serial_number_for_this_entity'] = self.env['ir.sequence'].next_by_code('some_project.res.partner')
    return super(ThisEntity, self).create(vals_list)

这种方法最符合Odoo的设计逻辑,既保留了正常业务操作的权限控制,又不影响演示数据的自动加载。


2. 自动给安装用户分配权限组

在模块的data目录下创建XML配置文件,提前给默认管理员(或指定安装用户)分配所需权限组,确保加载演示数据前用户已拥有权限。

步骤:

  1. 创建data/assign_groups.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <!-- 给admin用户分配group_some_role权限组 -->
    <record id="res_user_admin_assign_some_role" model="res.users">
        <field name="id" ref="base.user_admin"/>
        <field name="groups_id" eval="[(4, ref('some-project.group_some_role'))]"/>
    </record>
</odoo>
  1. 在模块的__manifest__.py中,将该XML文件添加到data列表且放在演示数据文件之前:
'data': [
    'data/assign_groups.xml',
    'data/demo_data.xml',  # 你的演示数据文件
    # 其他数据文件
],

3. 以超级用户身份创建演示数据

在演示数据的XML文件中,通过context="{'sudo': True}"或sudo()方法,让演示数据以超级用户身份创建,绕开权限校验:

方式一:给record添加sudo上下文

<record id="demo_this_entity" model="this.entity" context="{'sudo': True}">
    <field name="name">Demo Entity</field>
    <!-- 其他字段 -->
</record>

方式二:用function调用sudo后创建

<function model="this.entity" name="sudo" eval="[]">
    <function name="create" eval="[{'name': 'Demo Entity', ...}]"/>
</function>

这种方法适合快速临时解决,但如果演示数据需要模拟普通用户的操作场景则不推荐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:15:36