2017-11-03 1 views
3

나는 Odoo 10을 사용하고 있습니다. 새로운 사용자가 (localhost : 8069/web/signup을 통해) 가입하면 그룹 i에 자동으로 할당되기를 원합니다. 내 고유의 사용자 정의 모듈에서 생성됩니다 (사용자는 나중에 정규 포털 사용자로 변환 할 수 있도록 관리자로부터 인증을 받아야하며 가입 후 제한된 액세스 권한을받습니다).Odoo - 가입 직후 사용자 그룹 ID 변경 (전자 상거래)

나는 많은 것을 시도했다. 내 최근의 노력은 다음과 같습니다 : 나는 auth_signup 컨트롤러를 대체 할 수 있도록 내가 import odoo.addons.auth_signup.controllers.main as auth_signup_controller

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'}) 

참고.

나는 그 방법을 가입 할 책임이 있습니다. 그래서 나는 새로운 방법으로 그것을 호출하고 나서 새로 생성 된 사용자의 group_id를 변경하려고 시도한다.

필자가 놓친 것은 컨트롤러 메소드 컨텍스트 내에서 다른 모델의 필드 값을 덮어 쓰는 방법에 대한 기본적인 이해입니다. 나는 그것이 확실하지 않지만 나는 'request'객체를 사용하고있다. 그런 목적으로 'self.pool ['res.users ']를 사용하는 사람들을 보았지만 내 문제의 맥락에서 어떻게 적용하는지 이해하지 못합니다.

내가 만든 후에 사용자의 기본 그룹을 변경하는 방법이 있습니다. (알고 싶습니다.) 또한 일반적인 문제를 해결하는 방법을 알고 싶습니다 (액세스 및 덮어 쓰기 다른 모듈의 필드 값).

또 다른 이상한 점은 groups_id 필드가 'res.users'모델에 존재하지만 'res.users'테이블을보기 위해 클릭하면 내 pgAdmin 인터페이스에 열로 나타나지 않는다는 것입니다. 왜 그런 생각 이니?

고맙습니다.

답변

0

내가 모르는 경우 호출 한 후 :

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() 

주를 저지해야 할 수 있습니다 : 당신이 전체 xmlID를 통과해야 self.env.ref.

+0

답변 해 주셔서 감사합니다. 내가 문제를 해결했지만이 솔루션을 시도한다 –

+0

당신의 접근 방식을보고 싶습니다 솔루션을 넣어 – Cherif

0

이 나를 위해 일 것입니다 : 내가 인수 '모듈 명'와 내가 가져하고자하는 그룹의 'xmlID'로 전달하는 get_object에서

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)]}) 

.

'ir.model.data'가 사용 된 환경 인 이유는 여전히 분명하지 않지만이 점이 매력으로 작용합니다. 여기에 우리는 사용자를 그룹에 추가하는 것이 아니라 실제로 사용자에게 그룹을 추가하는 것이고, 실제로는 더 의미가있는 것입니다.

더 이상의 설명 또는 병렬 솔루션을 환영합니다. 그 방법이 나와 같이 명확하지 않습니다.

감사합니다.