2010-04-05 7 views
15

Est-ce que quelqu'un sait comment vous pouvez désactiver l'auto-complétion sur un champ de texte dans Django? Par exemple, un formulaire que je génère à partir de mon modèle a un champ de saisie pour un numéro de carte de crédit. C'est une mauvaise pratique de laisser l'autocomplétion activée. En faisant le formulaire à la main, j'ajouterais une instruction autocomplete = "off", mais comment le faites-vous dans Django tout en conservant la validation du formulaire?Désactiver la saisie semi-automatique dans textfield dans Django?

Répondre

21

Dans votre formulaire, spécifiez le widget que vous souhaitez utiliser pour le champ et ajoutez un dictionnaire attrs sur ce widget. Par exemple (droit du 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'})) 

il suffit d'ajouter 'autocomplete'='off' au dict attrs.

+0

Merci! Je l'ai trouvé 1 minute avant votre réponse ... n'est-ce pas toujours le cas ?! –

+3

Cela ne fonctionne pas pour moi dans Chrome. Il remplit toujours automatiquement les champs de nom d'utilisateur et de mot de passe, même lorsque la saisie semi-automatique est désactivée. – Cerin

+0

jeter un oeil à cette question: http://stackoverflow.com/questions/15738259/disabling-chrome-autofill – codescribblr

21

Ajoutez l'autocomplete = "off" à la balise de formulaire, vous n'avez donc pas besoin de modifier l'instance de django.form.

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

+3

Cela ne fonctionne pas en chrome. – nima

+0

@nima a travaillé pour moi – Jimmar

2

Si vous définissez vos propres formulaires, vous pouvez ajouter des attributs à vos champs du formulaire.

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

Si vous utilisez des modèles, vous n'aurez pas le luxe de définir des attributs de champ dans le formulaire. Toutefois, vous pouvez utiliser __init__ pour ajouter les attributs requis.

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

Vous pouvez également ajouter des attributs de Meta

class CommentForm(forms.ModelForm): 
    class Meta: 
     widgets = { 
      'name': TextInput(attrs={'autocomplete': 'off'}), 
     } 
Questions connexes