2016-12-13 16 views
0

私のプロジェクトでは、という2つのモデルがあります。教師。これらの2つのモデルは、ユーザーへのOneToOneフィールドです。 (インデックスページ、よくある質問、およそ...)、教師(教師のためのインタフェース、彼女のコースを管理し、編集プロフィール...)と学生の学生のための(インターフェース、プロフィール: 私は3つのアプリケーションを持っています。 ..)Django:認証済みの異なるユーザーモデル

私はのログインフォーム(アプリケーションの家庭内)でログインし、教師と生徒にログインし、認証後に正しいアプリケーションにリダイレクトしたいと考えています。それを行うための最善の方法は何ですか?私は2つのグループ(教師と学生)を作成し、登録フォームの後に正しいグループに割り当て、ログインフォームでグループをチェックすると思いますか?

PS:学生がアカウントを作成することができますが、先生のために、私たちのチームは、アカウントを作成しますので、私たちはユーザーテーブルとの関係がOneToOneある場合は、ユーザーからアクセスすることができ、教師

答えて

1

のための登録フォームを持っていません.studentまたはuser.teacher、あなたがそれを行うだろうので...

def login_view(request): 
    if form.is_valid(): 
     # get user from form 
     _user = form.get_user() 
     user = authenticate(form.cleaned_data['username'], form.cleaned_data['password']) 
     login(request, user) 
     if hasattr(user, 'student'): 
      # You'll return to student app 
      return redirect('studen:home') 
     # else 
     return redirect('teacher:home') 

EDIT

decorators.py

... 
from django.contrib.auth.decorators import user_passes_test 
def group_required(*args): 
    if args: 
     def decorator(user): 
      if user.is_staff or user.is_superuser: 
       return True 
      return user.is_authenticated() and user.groups.filter(name__in=args).exists() 
    else: 
     decorator = lambda x: x.is_authenticated() 

    return user_passes_test(decorator) 
... 

そして、それを使用して...

... 
@group_required('student') 
def home_student(request): 
    # some code 

@group_required('teacher', 'student'): 
def common_view_for_all(request): 
    # some code 
... 
+0

ありがとうございましたが、私は学生のための教師ビューのアクセスを保護したい場合、私はそれがグループを作成していないデコレータを使用するための最良の方法だと思いますか? – Alexandre

+0

はい、グループでデコレーターを務めましたが、私は答えを更新する方法を説明します... –

+0

thx、 '@ permission_required'を使用 – Alexandre

関連する問題