2017-11-03 12 views
3

私はOdoo 10を使用しています。新しいユーザーが(localhost:8069/web/signupを使用して)サインアップした後、私の独自のカスタムモジュールで作成されます(ユーザーは後で管理者からの認証を必要とするため、通常のポータルユーザーに変換することができます;サインアップ後、制限付きアクセスを受け取ります)。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を変更しようとします。

私が見逃すのは、コントローラーメソッドのコンテキスト内でフィールドの値を別のモデルから上書きする方法の基本的な理解です。私はそれがわからないが、私は '要求'オブジェクトを使用しています。このような目的で「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」が使用される環境である理由はまだ分かりませんが、これは魅力的なものです。ここでは、ユーザーをグループに追加するのではなく、実際にはより意味のあるグループにユーザーを追加することに注意してください。

これ以上の解明または並行した解決策は歓迎されますが、その方法は私には分かりません。

ありがとうございました。

関連する問題