Django 密码字段自定义类



我想用自定义类渲染密码字段,所以我尝试了这个:

from django.contrib.auth import get_user_model
from django.db import transaction
User = get_user_model()
class SignupForm(forms.ModelForm):
first_name = forms.CharField(label=_(u'First name'), max_length=30)
last_name = forms.CharField(label=_(u'Last name'), max_length=30)
password1 = forms.CharField(widget = forms.PasswordInput(render_value = True, attrs={'class': 'form-control', 'placeholder': 'Your password'}))

def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs) 
self.fields['username'].widget.attrs.update({'class': 'form-control', 'placeholder': 'Your username'})
self.fields['first_name'].widget.attrs.update({'class': 'form-control', 'placeholder': 'Your first name'})
self.fields['last_name'].widget.attrs.update({'class': 'form-control', 'placeholder': 'Your last name'})
self.fields['email'].widget.attrs.update({'class': 'form-control', 'placeholder': 'Your email address'})
self.fields['password1'].widget.attrs.update({'class': 'form-control', 'placeholder': 'Your password'})

您可能注意到,我试图在声明和初始化中添加类,但这些都不起作用。该类仍然是默认类。

请注意,对于电子邮件、用户名和其他字段,类/占位符工作正常。 我错过了什么吗?

编辑: 这可能有助于诊断问题。这是我在HTML中使用的:

<div class="col-md-6">
<br />
<div class="form-group">
<label for="password1">{{ form.password1.label }}</label>  
{{ form.password1 }}    
{% if form.password1.errors %}
<div class="text-danger">{{ form.password1.errors|escape }}</div>   
{% endif %}                             
</div>
</div>

您可以在没有 init 方法的情况下直接执行此操作

password1 = forms.CharField(widget=forms.PasswordInput(
attrs={'class':'form-control','type':'password', 'name': 'password','placeholder':'Password'}),
label='')

Ngawang13 的回答为我解决了问题中的问题——即类设置为form-control.

但是,要扩展 Ngawang13 的答案,如果您想在多个位置使用此字段,则可以创建自定义字段类

class MyCustomPasswordField(forms.CharField):
def __init__(self, **kwargs,):
self.widget = forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'})
super().__init__(**kwargs)

相关内容

  • 没有找到相关文章

最新更新