创建一个新表(模型)并将其与Django中的auth_user相关联

时间:2017-03-25 21:54:07

标签: python mysql django

我正在尝试创建一个新模型来跟踪当前密码和最近使用的密码。我希望它看起来像这个粗略的例子:

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中的任何一个,请回复错误。

我最大的问题是:

  1. 我不知道如何导入auth_user,因此我可以将用户名分配给此新表
  2. 我不知道如何将ID更改为用户名而不是数字。 (这可以使用ForeignKey完成吗?)
  3. 我希望能够将值与传入的变量进行比较......
  4. #3的例子:   - 我想执行User.set_password('pass')(以便传递散列),然后我想在提交User.save()之前将这个新密码与'current_pass'和'prev_pass'进行比较。如果密码与使用的密码之一匹配,我想中止。

    我正在使用Django 1.9和Python 2.7.13

    更新 所以看看收到的答案和更多信息研究......这是我的新班级

    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"
    

1 个答案:

答案 0 :(得分: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')之前检查密码。

  4. 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