2010-04-05 168 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'}), 
     } 
相關問題