2017-03-25 8 views
0

新しいモデルを作成して、現在のパスワードと使用された直近の以前のパスワードを追跡しようとしています。私はそれがこの粗製の例のようになりたい:新しいテーブル(モデル)を作成し、Djangoのauth_userに関連付ける

ID --- CUR_PASS --- PREV_PASS 
1 --- 123  --- 321 
2 --- 456  --- 654 

それは私のAUTH_USER表にIDユーザ名を作ることは可能ですか?ここで

は、これまでのところ、私が持っているクラスです。

# class model to store previously used passwords 
class oldPass(models.Model): 
    # username = models.ForeignKey('something') --> instead of ID? 
    current_pass = models.CharField(max_length=100) 
    prev_pass = models.CharField(max_length=100) 

    class Meta: # meta class to define the table name 
     db_table = "old_pass" 

私はそれはので、私はIDはユーザー名も持っているとAUTH_USERでパスワードを変更する際、に戻って確認することができ作るしようとしていますold_passテーブルを参照し、値が比較されていないことを確認します。それがemの場合は、エラーを返す。私は私がするIDを変更する方法がわからない

  • この新しいテーブルにユーザー名を割り当てることができるようにAUTH_USERをインポートする方法がわからない

    1. 私の最大の問題は、これらのです数字の代わりにユーザー名。 (これは、ForeignKeyのを使用して行われますか?)

    2. 私は#3の変数に渡された...

    例に値を比較することができるようにしたい: - 私はUser.set_passwordを実行したいです( (パスがハッシュされるように)、私はUser.save()をコミットする前に、この新しいパスワードを 'current_pass'と 'prev_pass'と比較したいと思います。パスワードが使用されているパスワードのいずれかと一致する場合は、中止します。私は、Djangoの1.9とPython 2.7.13

    ので、受信回答や詳細調査を見てUPDATE を使用しています

    ...これは

    from django.contrib.auth.models import User 
    # class model to store previously used passwords 
    class oldPass(models.Model): 
        # username = models.ForeignKey(User) --> instead of ID? 
        current_pass = models.CharField(max_length=100) 
        prev_pass = models.CharField(max_length=100) 
    
        class Meta: # meta class to define the table name 
         db_table = "old_pass" 
    
  • +0

    私はあなたが求めているものを理解していません。なぜ 'models.ForeignKey( 'auth.User')'だけではないのですか?なぜあなたはそれがあなたがそれを意味するものであれ "ID"である必要がありますか? –

    +0

    それは公正だ、私はそれを明確に説明していないと思う。私はIDフィールドを通常の1,2,3,4などのレイアウトの代わりにユーザー名にしたかったのです。下のL.Xiaoの答えから分かるように、IDフィールドはそれほど重要ではありません。私は本当にusername、current_pass、prev_passという3つのフィールドを持ちたいと思います。ユーザ名を設定するには、auth_userテーブルから取得したいと思います。 –

    答えて

    0
      私の新しいクラスです。
    1. from django.conf import settingssettings.AUTH_USER_MODELはあなたのauth_userモデルです。

    2. id = models.CharField(primary_key=True)のようなカスタムIDを使用してください。しかし、ほとんどの場合、IDは無意味なフィールドでなければなりません。

    3. User.set_password('pass')を実行する前にパスワードを確認できます。

    models.py

    class oldPass(models.Model): 
        user = models.ForeignKey(`settings.AUTH_USER_MODEL`) 
        current_pass = models.CharField(max_length=100) 
        prev_pass = models.CharField(max_length=100) 
    
        class Meta: 
         db_table = "old_pass" 
    

    views.py

    if oldPass.objects.filter(user=user, pre_pass='pass').exists(): 
        raise Error 
    user.set_password('pass') 
    user.save() #at the same time, update user's password in oldPass 
    
    +0

    答えに感謝します。#1は間違いなく役立ちます。私は 'username = models.AUTH_USER_MODEL.username'のようなことをしてusername変数を割り当てますか? #3については、それが何を意味するのか分かりません。#3のために私の例を確認していますか?ありがとう –

    +0

    私は私の答えを編集し、いくつかのコードを追加します – Guinner

    +0

    ありがとう、私の質問に私の新しいクラスを追加しました。最後に、新しいクラスをどのようにインポートするのですか? 'django.models import OldPass'から? –

    関連する問題