如何解决Python Django表单密码字段占位符不生效问题?
解决Django UserCreationForm密码字段占位符不生效的问题
问题出在UserCreationForm的password1和password2是表单自定义字段,不属于User模型的字段,所以你在Meta类的widgets字典里配置这两个字段的占位符不会生效——Meta的widgets只对模型中存在的字段起作用。
下面给两种可行的解决方法:
方法一:重新定义密码字段
直接在表单类里重新声明password1和password2字段,指定对应的widget和占位符,同时保留原表单的帮助文本:
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django import forms class SignUpForm(UserCreationForm): password1 = forms.CharField( label='Password', widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), help_text=UserCreationForm.password1.field.help_text ) password2 = forms.CharField( label='Confirm Password', widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password'}), help_text=UserCreationForm.password2.field.help_text ) class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] widgets = { 'username': forms.TextInput(attrs={'placeholder': 'Username'}), 'email': forms.TextInput(attrs={'placeholder': 'Email'}) }
方法二:在__init__方法中修改字段属性
如果不想重新定义字段,可以在表单的初始化方法里直接更新password1和password2的widget属性:
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django import forms class SignUpForm(UserCreationForm): class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] widgets = { 'username': forms.TextInput(attrs={'placeholder': 'Username'}), 'email': forms.TextInput(attrs={'placeholder': 'Email'}) } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['password1'].widget.attrs.update({'placeholder': 'Password'}) self.fields['password2'].widget.attrs.update({'placeholder': 'Confirm Password'})
两种方法都能让密码字段的占位符正常显示,选你觉得顺手的就行。
内容的提问来源于stack exchange,提问作者leoisqualified
相关产品推荐
相关产品推荐

