ODOO技术咨询:create_uid为何始终为1?能否修改默认值?
ODOO中create_uid始终显示为1的原因及修改方案
碰到这个问题我太有经验了!之前帮好几个朋友排查过类似的情况,给你拆解下背后的原因,以及对应的解决办法:
为什么create_uid一直是1?
- 最常见的锅是误用了超级用户权限:哪怕你用新用户登录,但如果在创建数据的代码里调用了
sudo()方法(比如self.sudo().create(vals)),系统会强制以超级用户(admin,ID固定为1)的身份执行创建操作,自然create_uid就会被设成1。 - 权限配置不到位:如果你的新用户没有对应模型的创建权限,极端情况下系统可能会 fallback 到超级用户来完成操作(不过正常来说ODOO会直接弹出权限不足的提示,这种情况比较少见)。
- 自定义模块的代码bug:要是你自己开发了模块,有可能在重写
create方法时硬编码了create_uid = 1,或者重写时没正确调用父类的create方法,导致用户信息没有被正确传递。
能不能修改?当然可以!对应不同原因来解决:
- 去掉不必要的
sudo():检查你的业务代码,凡是创建记录的地方,如果没有特殊的超级用户需求,把sudo()删掉,改成普通的create()调用,这样系统就会用当前登录用户的ID来填充create_uid。 - 给新用户配置正确权限:进入ODOO的「设置」-「用户与权限」-「权限组」,确保你的新用户所属的权限组拥有对应模型的「创建」权限,这样用户就能用自己的身份创建数据了。
- 修复自定义代码的bug:
- 如果代码里有硬写
vals['create_uid'] = 1的情况,直接删掉这行; - 如果重写了
create方法,一定要记得调用父类的方法,比如:
这样才能保证用户信息被正确传递到创建流程中。def create(self, vals): # 这里放你的自定义逻辑 return super(YourModelName, self).create(vals)
- 如果代码里有硬写
- 检查批量导入/定时任务的上下文:如果你是通过批量导入或者定时任务创建数据,要确认这些工具的配置有没有强制设置用户ID为1,有的话改成使用当前执行用户的ID即可。
内容的提问来源于stack exchange,提问作者YamK
相关产品推荐
相关产品推荐

