我想在视图中创建密码作为密码字段.请有人帮帮我吗?提前致谢
class User(models.Model):
username = models.CharField(max_length=100)
password = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud) 我正在使用像这样的用户模型:
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username','password','email',)
Run Code Online (Sandbox Code Playgroud)
但密码字段显示为常规文本字段,而不是密码输入.如何确保显示密码字段?
我试过这个:
class UserForm(forms.ModelForm):
username = forms.CharField(max_length = 15, min_length = 6)
password = forms.PasswordInput()
class Meta:
model = User
fields = ('username','password','email',)
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
我也试图像这样添加一个确认密码字段,但这不会显示任何字段:
class UserForm(forms.ModelForm):
username = forms.CharField(max_length = 15, min_length = 6)
password = forms.PasswordInput()
cpassword = forms.PasswordInput()
def clean(self):
if self.cleaned_data['cpassword']!=self.cleaned_data['password']:
raise forms.ValidationError("Passwords don't match")
class Meta:
model = User
fields = ('username','password','cpassword','email',)
Run Code Online (Sandbox Code Playgroud) 因此,要使用电子邮件作为用户名,我会像这样重写内置User模型(受到Django 源代码的启发)
模型.py
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
objects = UserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
def __str__(self):
return self.email
Run Code Online (Sandbox Code Playgroud)
管理员.py
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
fieldsets = (
(None, {"fields": ("email", "password")}),
(("Personal info"), {"fields": ("first_name", "last_name")}),
(
("Permissions"),
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
},
),
(("Important dates"), {"fields": ("last_login", "date_joined")}),
)
add_fieldsets = (
(
None,
{
"classes": ("wide",),
"fields": ("email", "password1", "password2"),
},
),
)
list_display = …Run Code Online (Sandbox Code Playgroud)