在abstractuser django自定义用户模型中更改密码表单或链接

问题描述

我使用 abstractuser 创建了一个自定义用户模型,并用用户名替换了 mobile,然后在 admin 中重新创建了用户页面,但我的问题是我没有更改密码表单(在默认的 Django 身份验证中),如果我放置了 save 方法并更改了其他用户模型中的数据然后存储空密码,用户无法再登录

models.py:

class MyUser(AbstractUser):

    username = None
    mobile = models.CharField(max_length=15,unique=True)
    international_id = models.CharField(max_length=25,blank=True,null=True)
    company_name = models.CharField(max_length=255,null=True)
    business_code = models.CharField(max_length=25,null=True)
    otp = models.PositiveIntegerField(blank=True,null=True)
    otp_create_time = models.DateTimeField(auto_now=True)

    objects = MyUserManager()

    USERNAME_FIELD = 'mobile'
    REQUIRED_FIELDS = []

    backend = 'custom_login.mybackend.ModelBackend'

admin.py:

class MyUserAdmin(admin.ModelAdmin):
    list_display = ['mobile','company_name']

    search_fields = ['mobile']

    form = UserAdminChangeForm
    fieldsets = (
            (None,{'fields': ('mobile','email','password','otp')}),('Personal Info',{'fields': ('first_name','last_name','international_id')}),('Company Info',{'fields': ('company_name','business_code')}),(_('Permissions'),{'fields': ('is_active','is_staff','is_superuser','groups','user_permissions')}),(_('Important dates'),{'fields': ('last_login','date_joined')}),)

    class Meta:
        model = MyUser
admin.site.register(MyUser,MyUserAdmin)

forms.py:

from django import forms
from .models import MyUser
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.utils.translation import ugettext as _

class UserAdminChangeForm(forms.ModelForm):
    """A form for updating users. Includes all the fields on
    the user,but replaces the password field with admin's
    password hash display field.
    """
    # password = ReadOnlyPasswordHashField(label=("Password"),#     help_text=("Raw passwords are not stored,so there is no way to see "
    #                 "this user's password,but you can change the password "
    #                 "using <a href=\"../password/\">this form</a>."))

    password = forms.CharField(widget=forms.PasswordInput(),label=_('Password'),required=False)

    class Meta:
        model = MyUser
        fields = ['mobile','otp']

    def save(self,commit=True):
        # Save the provided password in hashed format
        user = super(UserAdminChangeForm,self).save(commit=True)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user

我需要分开一个页面来更改密码,或者我需要一些代码,当我输入空密码时它不会更改密码,因为当我填写空密码并编辑用户时,密码存储为空,用户无法再登录...例如,我更改用户的名字,然后在该用户无法登录后按保存按钮(密码字段为空),因为该用户为空密码存储

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...