Django自定义模型,在管理员创建用户时禁用电子邮件字段填充 我将默认用户模型更改为自定义用户模型,并使用电子邮件进行登录 登录到管理员并尝试创建新用户后,无法填写电子邮件字段。就像下面的截图 我在解决其他问题时删除了db.sqlite3。但后来已经重建了 python manage.py createsuperuser仍然有效。我可以通过终端创建超级用户

Django自定义模型,在管理员创建用户时禁用电子邮件字段填充 我将默认用户模型更改为自定义用户模型,并使用电子邮件进行登录 登录到管理员并尝试创建新用户后,无法填写电子邮件字段。就像下面的截图 我在解决其他问题时删除了db.sqlite3。但后来已经重建了 python manage.py createsuperuser仍然有效。我可以通过终端创建超级用户,django,django-admin,django-users,django-validation,django-custom-user,Django,Django Admin,Django Users,Django Validation,Django Custom User,这是密码 |/accounts/admin.py| 来自django.contrib导入管理 从django.contrib.auth.admin导入UserAdmin #在这里注册您的模型。 从.模型导入帐户 类AccountAdmin(UserAdmin): 列表显示=(‘电子邮件’、‘加入日期’、‘上次登录’、‘是管理员’) 搜索_字段=('email',) 只读字段=(“电子邮件”、“加入日期”、“上次登录”) 订购=('email',)#E033的解决方案 过滤器水平=() 列表过滤

这是密码


|/accounts/admin.py|
来自django.contrib导入管理
从django.contrib.auth.admin导入UserAdmin
#在这里注册您的模型。
从.模型导入帐户
类AccountAdmin(UserAdmin):
列表显示=(‘电子邮件’、‘加入日期’、‘上次登录’、‘是管理员’)
搜索_字段=('email',)
只读字段=(“电子邮件”、“加入日期”、“上次登录”)
订购=('email',)#E033的解决方案
过滤器水平=()
列表过滤器=()
字段集=(
(无,{'fields':('email','password')}),
)
添加_字段集=(
(无{
'类':('wide',),
“字段”:(“电子邮件”、“密码1”、“密码2”),
}),
)
管理员.站点.注册(帐户,帐户管理员)

|/accounts/backends.py|
从django.contrib.auth导入get\u user\u模型
从django.contrib.auth.backends导入ModelBackend
类EmailAuthBackend(ModelBackend):
def身份验证(自我、请求、电子邮件=无、密码=无、**kwargs):
UserModel=get\u user\u model()
如果电子邮件为无:
email=kwargs.get(UserModel.USERNAME\u字段)
如果电子邮件为无或密码为无:
返回
尝试:
user=UserModel.\u默认\u管理器。通过\u自然\u键(电子邮件)获取\u
除UserModel.DoesNotExist外:
#运行默认密码哈希程序一次以减少计时
#现有用户和不存在用户之间的差异(#20760)。
UserModel().设置密码(password)
其他:
如果用户。检查密码(密码)和自我。用户\u可以\u身份验证(用户):
返回用户

|/accounts/models.py| 来自django.db导入模型的

从django.contrib.auth.models导入AbstractBaseUser、BaseUserManager
类AccountManager(BaseUserManager):
def create_用户(自我、电子邮件、密码=无):
如果不是电子邮件:
raise VALUE ERROR(“用户必须通过电子邮件注册”)
user=self.model(
电子邮件=自我规范化电子邮件(电子邮件),
)
user.set_密码(password)
user.save(使用=self.db)
返回用户
def create_超级用户(自我、电子邮件、密码):
user=self.create\u用户(
电子邮件=自我规范化电子邮件(电子邮件),
密码=密码,
)
user.is_staff=True
user.is_admin=True
user.is_superuser=True
user.save(使用=self.db)
返回用户
类帐户(AbstractBaseUser):
email=models.EmailField(unique=True)
date\u joined=models.DateTimeField(自动\u now\u add=True)
last_login=models.DateTimeField(自动_now=True)
is_staff=models.BooleanField(默认值=False)
is_admin=models.BooleanField(默认值=False)
is_activate=models.BooleanField(默认值=True)
is_superuser=models.BooleanField(默认值=False)
对象=AccountManager()
用户名\字段='电子邮件'
定义(自我):
返回self.email
def具有_perm(自我、perm、obj=无):
返回self.is_admin
def具有模块(自身、应用程序标签):
返回真值

|/accounts/views.py| 来自django.views.generic import TemplateView的

从django.shortcuts导入渲染,重定向
从django.contrib.auth导入登录、注销、验证
from.forms导入注册表表单,LogInForm
类HomePageView(TemplateView):
模板名称='index.html'
def RegisterView(请求):
user=request.user
如果user.u经过身份验证:
返回重定向('home')
上下文={}
如有要求,请发送:
表单=注册表表单(request.POST)
如果form.is_有效():
user=form.save()
登录(请求、用户、backend='accounts.backends.EmailAuthBackend')
返回重定向('home')
其他:
表单=注册表表单()
上下文['register_form']=form
返回呈现(请求'accounts/register.html',上下文)
def LogInView(请求):
user=request.user
如果user.u经过身份验证:
返回重定向('home')
上下文={}
如有要求,请发送:
form=LogInForm(request.POST)
如果form.is_有效():
email=request.POST['email']
password=request.POST['password']
用户=验证(电子邮件=电子邮件,密码=密码)
如果用户:
登录(请求、用户、backend='accounts.backends.EmailAuthBackend')
返回重定向('home')
其他:
form=LogInForm()
上下文['login_form']=form
返回呈现(请求“accounts/login.html”,上下文)
def注销视图(请求):
注销(请求)
返回重定向('home')

|/accounts/forms.py| 来自django导入表单的

从django.contrib.auth.forms导入UserCreationForm
从django.contrib.auth导入验证
从.模型导入帐户
类注册表窗体(UserCreationForm):
email=forms.EmailField(label='email',错误消息={
“无效”:“电子邮件入侵”,
“必需”:“请输入电子邮件。”
})
password1=forms.EmailField(错误消息={'required':'Enter password please.})
password2=forms.EmailField(错误消息={'required':'Enter password confirmation please.})
错误消息={
“密码不匹配”:(两个p
from .forms import RegisterationForm


class AccountAdmin(UserAdmin):
    ...
    #              Remove ↓
    readonly_fields = ('email', 'date_joined', 'last_login')
    ...
    add_form = RegisterationForm