You need to enable JavaScript to run this app. 如何在Odoo中设置data files对应的记录为用户不可删除状态
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo中设置data files对应的记录为用户不可删除状态

Odoo导入受保护记录及删除权限限制实现方案

一、导入包含已有记录的data文件配置

针对不同格式的导入文件,优先配置数据保护标记,避免后续被模块升级覆盖,同时为权限限制做标识:

  • 若使用XML格式的模块内置数据:在<data>标签添加noupdate="1"属性,标签内定义的所有记录导入后会被标记为受保护数据,模块升级时不会被覆盖,示例结构:
<odoo>
    <data noupdate="1">
        <!-- 你的已有记录定义 -->
        <record id="existing_record_001" model="your.target.model">
            <field name="name">测试记录</field>
        </record>
    </data>
</odoo>
  • 若使用CSV/Excel格式手动导入:可先给目标模型新增一个布尔类型的自定义字段is_protected,默认值为False,导入数据时批量将该字段的值设为True,作为受保护记录的标识。
  • 若使用CSV格式作为模块内置数据:在模块的__manifest__.py文件中,将对应CSV文件路径放入noupdate节点下,即可实现和XML加noupdate="1"相同的效果。

二、普通用户删除权限限制实现

推荐两种实现方案,可根据你的技术能力选择:

方案1:配置记录规则(无需改代码,适合运维人员)

  1. 开启Odoo开发者模式,依次进入「设置」-「技术」-「安全」-「记录规则」
  2. 新建记录规则,选择你要限制的目标模型,例如导入的是客户数据就选res.partner
  3. 规则域名填写:[('is_protected', '=', True)],如果是模块内置的noupdate标记数据,可填写[('id', 'in', ir_model_data().search([('model', '=', 'your.target.model'), ('noupdate', '=', True)]).mapped('res_id'))]
  4. 权限配置项中仅取消「删除」权限的勾选,适用组选择要限制的普通用户组(例如内部用户组),管理员组不要关联该规则,保证管理员可正常操作。
  5. 保存规则后生效,普通用户删除受保护记录时会直接触发权限报错。

方案2:重写unlink方法(限制更严谨,适合开发人员)

在自定义模块中继承目标业务模型,重写删除方法增加权限校验,代码示例:

from odoo import models, exceptions

class TargetModel(models.Model):
    _inherit = 'your.target.model'

    def unlink(self):
        # 仅校验非系统管理员的操作
        if not self.env.user.has_group('base.group_system'):
            # 筛选当前要删除的记录中包含的受保护记录
            protected_recs = self.filtered(lambda x: x.is_protected)
            if protected_recs:
                raise exceptions.UserError('您没有权限删除系统导入的受保护记录,请联系管理员处理')
        return super(TargetModel, self).unlink()

代码部署后升级自定义模块即可生效,普通用户触发删除受保护记录操作时会直接抛出提示。

注意事项

  • 导入已有记录前请确认记录的外部ID(External ID)和系统现有记录匹配,避免生成重复数据
  • 所有权限限制都不对系统管理员生效,避免出现异常受保护数据无法清理的问题
  • 如需灵活调整记录保护状态,可给管理员配置is_protected字段的编辑权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:15:00