在Django的文本字段中禁用自动完成功能?

时间:2010-04-05 20:23:49

标签: python django forms autocomplete

有谁知道如何在Django的文本字段中关闭自动完成功能?

例如,我从模型生成的表单有一个信用卡号的输入字段。保留自动完成功能是不好的做法。在手工制作表单时,我会添加一个autocomplete =“off”语句,但是如何在Django中执行此操作并仍然保留表单验证?

4 个答案:

答案 0 :(得分:26)

在表单中,指定要用于该字段的窗口小部件,并在该窗口小部件上添加attrs字典。例如(直接来自django documentation):

class CommentForm(forms.Form):
    name = forms.CharField(
                widget=forms.TextInput(attrs={'class':'special'}))
    url = forms.URLField()
    comment = forms.CharField(
               widget=forms.TextInput(attrs={'size':'40'}))

只需将'autocomplete'='off'添加到a​​ttrs dict。

答案 1 :(得分:25)

将autocomplete =“off”添加到表单标记中,这样您就不必更改django.form实例。

<form action="." method="post" autocomplete="off"> {{ form }} </form>

答案 2 :(得分:4)

如果您要定义自己的表单,可以在表单中的字段中添加属性。

class CommentForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs={
        'autocomplete':'off'
    }))

如果您使用的是模型,那么您将无法在表单中定义字段属性。但是,您可以使用__init__添加必需的属性。

class CommentForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(CommentForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget.attrs.update({
            'autocomplete': 'off'
        })

您还可以添加Meta

中的属性
class CommentForm(forms.ModelForm):
    class Meta:
        widgets = {
            'name': TextInput(attrs={'autocomplete': 'off'}),
        }

答案 3 :(得分:1)

对我来说,在模板中添加额外的属性也可以:

`<form method="POST", autocomplete="off">
    {% csrf_token %}
    {{ form.as_p }}`