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

29 投票
5 回答
23710 浏览
提问于 2025-04-15 21:16

有没有人知道怎么在Django中关闭文本框的自动补全功能?

比如说,我从模型生成的一个表单里有一个输入信用卡号码的字段。让自动补全功能保持开启是不太好的做法。如果我手动制作这个表单,我会加上autocomplete="off"这个设置,但在Django中怎么做才能关闭自动补全,同时又不影响表单的验证呢?

5 个回答

13

如果你在自己定义表单,可以给表单里的字段添加一些属性。

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

在表单标签里加上autocomplete="off",这样你就不用去修改django.form的实例了。

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

36

在你的表单里,指定你想用的控件类型,并在这个控件上添加一个叫做 attrs 的字典。举个例子(直接来自Django文档):

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

只需要在这个 attrs 字典里加上 'autocomplete': 'off' 就可以了。

撰写回答