Django PasswordInput

时间:2014-02-15 18:56:55

标签: django django-forms django-admin

我使用PasswordInput来获取可选属性。

models.py

password = models.CharField(_('Site Password'), max_length=128,
    blank=True, null=True)

forms.py

from django.forms import PasswordInput

...

class Meta:
    model = ...
    widgets = {
        'password': PasswordInput(),
    }

哪个按预期工作。但是,使用此小部件意味着一旦设置了密码,就无法清除此输入!

我希望有类似AdminFileWidget的东西,可以通过选择' clear'来清除图像/文件。复选框。

其他选项是添加额外的' clear_password'字段到ModelForm。

clear_password = forms.BooleanField(label=_('Clear'), initial=False,
                                    required=False)

清除保存方法的密码:

def save(self, commit=True):
    ...

    if self.cleaned_data['clear_password']:
        obj.password = None
    else:
        # Save the provided password in hashed format
        obj.password = make_password(self.cleaned_data['password'])

这也有效。但我希望有一个更清洁的解决方案......

我看了一下django.forms.widgets.ClearableFileInput ..但对于像我这样的新手来说这太复杂了:-(。

任何帮助将不胜感激。非常感谢

1 个答案:

答案 0 :(得分:0)

您可以通过将null值传递给value属性来清除表单的值。

类似的东西:

from django.forms import PasswordInput
from models import YourModel

password = forms.PasswordInput(attrs={'value': ''})

class Meta:
    model = YourModel