Django密码字段自定义类

qrjkbowd  于 2023-05-19  发布在  Go
关注(0)|答案(2)|浏览(124)

我想用一个自定义类来呈现密码字段,所以我尝试了这个:

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'})

正如你可能注意到的,我试图在声明和初始化中添加类,但这些都不起作用。类仍然是默认类。
请注意,对于email、username和其他字段,class/placeholder可以正常工作。我错过什么了吗?
编辑:这可能有助于诊断问题。这是我在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>
qncylg1j

qncylg1j1#

您可以直接执行此操作,而无需init方法

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

6pp0gazn2#

Ngawang13's answer为我解决了问题中的问题-即类被设置为form-control
然而,为了扩展Ngawang 13的答案,如果你想在多个地方使用这个字段,你可以创建一个自定义字段类

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

相关问题