我正在使用 Odoo 10。在新用户注册后(通过 localhost:8069/web/signup)我希望他自动分配到我在我自己的自定义模块上创建的组中(用户将需要身份验证稍后来自管理员,以便他可以转换为普通门户用户;注册后他将获得受限访问权限)。
我试过很多东西。我最近的努力是这样的:
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'})
请注意,我有 import odoo.addons.auth_signup.controllers.main as auth_signup_controller
这样我就可以覆盖 auth_signup Controller 。
我已将该方法定位为负责进行注册的方法。所以我在我的新方法中调用它,然后尝试更改新创建的用户的 group_id。
我想念的是对如何从 Controller 方法上下文中的另一个模型覆盖字段值的基本理解。我正在使用“请求”对象,尽管我不确定。我见过有人出于此类目的使用“self.pool['res.users']”(例如),但我不明白如何在我的问题上下文中应用它。
我也相信有一种方法可以在创建用户后更改用户的默认组(我想知道),但我也想了解如何解决一般问题(访问和覆盖来自另一个模块的字段值)。
另一个奇怪的事情是,字段 groups_id 确实存在于“res.users”模型中,但是当我单击以查看“res.users”表时,它并没有作为列出现在我的 pgAdmin 界面中......任何想法为什么?
Cảm ơn bạn rất nhiều!
我不知道在调用之后:
super(RestrictAccessOnSignup,self).do_signup(*args)
您将有权访问请求对象中的用户记录,但如果是这样,只需添加 像这样将组分配给用户,否则您必须在调用 do_signup 后找到用户记录或 ID 的保存位置,因为您需要更新该记录以向该组添加广告。
# create env variable i hate typing even i'm typing here ^^
env = request.env
env.user.sudo().write({'groups_id': [
# in odoo relation field accept a list of commands
# command 4 means add the id in the second position must be an integer
# ref return an object so we return the id
( 4, env.ref('your_module_name.group_unuser').id),
]
})
如果没有在数据库中提交更改,您可能需要提交它们
request.env.cr.commit()
注意:self.env.ref 必须传递完整的 xmlID。
Tôi là một lập trình viên xuất sắc, rất giỏi!