2017-07-14 19 views
0

を動作しません。私はhtmlの貴様をレンダリングする、のための私は、このようなget_profile()とPERFプロパティを、使用していますこれをやろうとしている私のログインビューでチェックプロファイルは、私はプロファイルの2種類を持って私のプロジェクトでは

def get_profile(user): 
""" defines the kind of profile 
Example: 
    from roles.models import * 
    user = User.objects.all() 
    profile = get_profile(user[1]) 
    profile.perfil 
""" 
    try: 
     professor = Professor.objects.get(username=user.username) 
     return professor 
    except: 
     pass 

    try: 
     student = Student.objects.get(username=user.username) 
     return student 
    except: 
     pass 

    return user  

:私はこのようなメソッド呼び出しget_profileを()、作成しました:

class LoginValidator(View): 

    def post(self, request, **kwargs): 

    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(request, username=username, password=password) 

    if user is not None: 
     if user.is_active: 
      login(request, user) 
      messages.success(request, 'Logado com sucesso') 
      if(get_profile(user).perf == 'Professor'): 
       return render(request,'professor/home.html') 

      return render(request,'student/home.html') 

    else: 
     messages.error(request, 'Usuário não encontrado') 

私の質問です:なぜこのメソッドは動作しませんか?これを実装するより良い方法がありますか?

私はまた、代替手段に満足しています。

Obs:。私はDjango 1.11とPython 3.5.2を使用しています

+1

'perfil'は定義されていません。これはタイプミスですか? オプションが 'professor'と' student'である 'profile'に別のフィールドを単に使うのではないのでしょうか?それはあなたの人生を楽にします。 – jgmh

答えて

0

hasattr()プロパティを使うとOneToOneFieldでうまくいきます。あなたがOneToOneフィールドとして教授を使用しているsee here in doc

は、単にあなたのmodels.pyに

def get_profile(self): 
    if(hasattr(self, 'profile')): 
     return self.profile 
    return None 

注コードのこの部分を置きます。私はの教授の2つ以上のモデルがあると仮定しているので、のプロファイルをここで使用しています。また、プロファイルフィールドにrelated_name属性が表示されません。ドキュメントからの引用

user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name = 'profile') 

:としてrelated_name属性を入れまた、キャッチ例外の必要性を回避するためにはhasattrを使用することができます。

この方法は、ユーザーモデルオブジェクトで動作します。 ユーザモデルオブジェクトはプロファイルモデルオブジェクトのOneToOneリレーションを持っているためです。 これが役立つことを願っています。ありがとう。

関連する問題