从AbstractUser继承的模型不会哈希密码字段

Dan*_*res 10 django django-models django-forms django-admin django-views

我有一个继承了AbstractUser的模型,如下所示:

class Driver(AbstractUser):
  dni = models.CharField(max_length=8,validators=[validate_dni],unique=True)
  license = models.CharField(max_length=9,unique=True)
  birthday = models.DateField()
  sex = models.CharField(max_length=1, choices=SEX_CHOICES)
  creation_date = models.DateField(auto_now = True)
Run Code Online (Sandbox Code Playgroud)

根据这个:https://docs.djangoproject.com/en/dev/topics/auth/customizing/

如果您对Django的用户模型完全满意并且您只想添加一些其他配置文件信息,则可以简单地继承django.contrib.auth.models.AbstractUser并添加自定义配置文件字段.此类提供默认用户的完整实现作为抽象模型.

但是,在我的管理视图中,密码字段是一个简单的文本输入,密码保存为原始文本.我可以尝试使用AbstractBaseUser,但首先我需要澄清这个问题.我是从Django开始的,所以我是一个小新手.

谢谢.

Ken*_*all 9

您不必实际定义自己的功能.你只需要使用与注册它UserAdmin的类django.contrib.auth.admin和它的作品开箱.

显然,在您的admin.py文件中,请确保您具有以下内容:

from django.contrib.auth.admin import UserAdmin
admin.site.register(CustomUserModel, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

  • @mr_bulrathi:我更新了答案,包括一个带有自定义管理模型的示例,这是您需要做的才能使密码哈希正确并显示自定义字段。 (2认同)

cat*_*ine 7

您需要定义一个函数来散列该密码。我认为你直接将其保存到数据库。

class MyForm(forms.ModelForm):
    ............
    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(MyForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user
Run Code Online (Sandbox Code Playgroud)