Python Odoo-注册后立即更改用户组id(电子商务)
我用的是奥多10。在新用户注册后(通过localhost:8069/web/signup),我希望他自动分配到我在自己的自定义模块上创建的组中(该用户稍后需要管理员的身份验证,以便他可以转换为常规门户用户;注册后他将获得受限访问) 我试过很多东西。我最近的努力如下:Python Odoo-注册后立即更改用户组id(电子商务),python,openerp,overriding,odoo-10,controllers,Python,Openerp,Overriding,Odoo 10,Controllers,我用的是奥多10。在新用户注册后(通过localhost:8069/web/signup),我希望他自动分配到我在自己的自定义模块上创建的组中(该用户稍后需要管理员的身份验证,以便他可以转换为常规门户用户;注册后他将获得受限访问) 我试过很多东西。我最近的努力如下: class RestrictAccessOnSignup(auth_signup_controller.AuthSignupHome): def do_signup(self, *args): supe
class RestrictAccessOnSignup(auth_signup_controller.AuthSignupHome):
def do_signup(self, *args):
super(RestrictAccessOnSignup, self).do_signup(*args)
request.env['res.groups'].sudo().write({'groups_id': 'group_unuser'})
请注意,我将导入odoo.addons.auth\u signup.controllers.main作为auth\u signup\u控制器
,以便覆盖auth\u signup控制器
我已经找到了负责注册的方法。因此,我在新方法中调用它,然后尝试更改新创建的用户的组id
我错过的是对如何从控制器方法上下文中的另一个模型覆盖字段值的基本理解。我正在使用'request'对象,尽管我不确定它。我见过有人为了这些目的使用“self.pool['res.users'](例如),但我不知道如何在我的问题背景下应用它
我还相信,有一种方法可以在创建用户的默认组后更改该组(我想知道),但我也想了解如何解决一般问题(从另一个模块访问和覆盖字段的值)
另一件奇怪的事情是,字段groups_id确实存在于'res.users'模型中,但当我单击以查看'res.users'表时,它在我的pgAdmin界面中没有显示为列。。。知道为什么吗
非常感谢 我不知道打电话后:
super(RestrictAccessOnSignup,self).do_signup(*args)
您将有权访问请求对象中的用户记录,但如果是这样,只需添加
组到用户是这样的,如果没有,您必须在调用do_signup后找到用户记录或id的保存位置,因为您需要将该记录更新到此组
#创建环境变量我讨厌在这里输入^^
env=request.env
write({'groups\u id':[
#在odoo关系字段中,接受命令列表
#命令4表示将id添加到第二个位置必须是整数
#ref返回一个对象,因此我们返回id
(4,env.ref('your_module_name.group_unuser').id),
]
})
若数据库中并没有提交更改,那个么您可能需要提交它们
request.env.cr.commit()
注意:self.env.ref您必须通过完整的xmlID。这对我来说很有用:
def do_signup(self, *args):
super(RestrictAccessOnSignup, self).do_signup(*args)
group_id = request.env['ir.model.data'].get_object('academy2', 'group_unuser')
group_id.sudo().write({'users': [(4, request.env.uid)]})
在get_对象中,我将要获取的组的'module'和'xmlID'作为参数传递
我仍然不清楚为什么“ir.model.data”是使用的环境,但这很有魅力。请注意,这里我们将用户添加到组中,而不是将组添加到用户中,对我来说,这实际上更有意义
任何进一步的解释或并行解决方案都是受欢迎的,这些方法对我来说并不像它们应该的那样清晰
谢谢 谢谢你的回答!我解决了这个问题,但我会尝试这个解决方案。把你的解决方案,我想看看你的方法