2010-04-05 126 views
15

有谁知道如何关闭Django文本框的自动填充功能?在Django中的文本框禁用自动完成功能?

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

回答

21

在您的表单中,指定您想要用于该字段的小部件,并在该小部件上添加一个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'到ATTRS字典。

+0

由于添加的属性!我在你的答案前1分钟发现了这一点...不是它总是如此吗?! – 2010-04-05 21:05:25

+3

这在Chrome中不起作用。即使自动完成=关闭,它仍会自动填充用户名和密码字段。 – Cerin 2014-05-28 19:32:57

+0

看看这个问题:http://stackoverflow.com/questions/15738259/disabling-chrome-autofill – codescribblr 2017-04-21 14:44:43

21

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

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

+3

这不适用于铬。 – nima 2015-06-23 11:28:55

+0

@nima为我工作 – Jimmar 2015-12-20 16:22:18

2

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

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'}), 
     } 
相关问题