2017-03-25 25 views
0

我正在尝试创建一个新模型来跟踪当前密码和最近使用的最近一次使用的密码。我希望它看起来像这样原油例如:创建一个新表(模型)并将它与Django中的auth_user关联

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

是否有可能使ID用户名AUTH_USER表?

这里是I类到目前为止有:

# 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表,并比较确保它们不是的值。如果它是其中一个,则反馈一个错误。

我最大的问题是这些:

  1. 我不知道如何导入AUTH_USER这样我就可以将用户名分配到这个新表
  2. 我不知道如何更改ID为用户名而不是数字。 (这会使用ForeignKey的做什么?)
  3. 我希望能够以比较值的变量传递...#3

例子: - 我想执行User.set_password( 'pass')(以便传递被散列),然后我想在提交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字段并不是我想的那么重要。我真的想有3个字段,用户名,current_pass,prev_pass ..并设置用户名,我想从auth_user表中拉出它。 –

回答

0
  1. from django.conf import settingssettings.AUTH_USER_MODEL是您的auth_user模型。

  2. 使用像这样的自定义标识id = models.CharField(primary_key=True)。但大多数情况下,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'的方式分配一个用户名变量吗?至于#3,我不确定你的意思是什么..你只是确认我的例子#3?谢谢 –

+0

我编辑我的答案并添加一些代码 – Guinner

+0

感谢您的更新,我已将我的新课程添加到我的问题中。最后一个问题,我如何导入我的新课程? '从django.models导入OldPass'? –

相关问题