Django crispy表单显示密码为明文

时间:2014-06-14 19:44:17

标签: python django django-crispy-forms

Crispy表单当前将我的密码字段显示为明文。我尝试了以下但我仍然无法使用type = password。

Fieldset(
            'Enter a password.',
            PrependedText('password', '<i class="fa fa-key"></i>',
                          placeholder='Password',
                          autocomplete='off',
                          widget=forms.PasswordInput,
                          ),
        ),

我也累了type="password"没有效果。

我没有错误。

3 个答案:

答案 0 :(得分:3)

我99.9%肯定您错过了将小部件添加到表单字段声明中。你应该有这样的东西,以显示密码字段:

class MyForm(forms.Form):
    ...
    password = forms.CharField(widget=forms.PasswordInput)
    ...

布局应该简单:

Layout(
    PrependedText('password', '@', placeholder="password", autocomplete='off')
)

widget=关键字参数是在Django的forms.CharField构造函数中定义的,而不是在django-cryspy-forms&#39; bootstrap.PrependedText构造函数。

您可以在Django表单字段here找到更多信息。

更新

如果你有一个模型表单,它可以自动构建(例如使用管理员视图),使用modelform_factory或自己定义ModelForm。以下是第3种方法的示例。

class MyModelForm(forms.ModelForm):
    class Meta:
        fields = (... fields you want to include in the form ...)

    password = forms.CharField(widget=forms.PasswordInput, ...)

请注意,通过提供模型表单字段覆盖,您还必须提供label,help_text(等)等属性,因为它们不会自动从模型字段中复制。

答案 1 :(得分:2)

我从未和crispy-forms和formsets好运,所以我只是直接在模板中使用表单。看看是否有效:

<form method="post">{% csrf_token %}
    {{ formset.management_form|crispy }}
    {% for form in formset %}
        <input id="id_form-{{ forloop.counter0 }}-id" name="form-{{ forloop.counter0 }}-id" type="hidden" value="{{ form.instance.pk }}"/>
        {{ form|crispy }}
    {% endfor %}
</form>

答案 2 :(得分:0)

您需要定义PasswordInput。

class YourForm(forms.ModelForm):

password = forms.CharField(label='Enter Password',widget=forms.PasswordInput(attrs={'placeholder': 'alphanumeric password'}))