Disable autocomplete sur textfield à Django?

est-ce que quelqu'un sait comment vous pouvez désactiver l'autocompletion sur un champ de texte à Django?

par exemple, un formulaire que je génère à partir de mon modèle a un champ d'entrée pour un numéro de carte de crédit. C'est une mauvaise pratique de laisser l'auto-complétion. En faisant le formulaire à la main, j'ajouterais une instruction autocomplete= "off", Mais comment faire dans Django et conserver la validation du formulaire?

16
demandé sur tau-neutrino 2010-04-06 00:23:48

4 réponses

dans votre forme, spécifiez le widget que vous voulez utiliser pour le champ, et ajoutez un attrs dictionnaire sur ce widget. Par exemple (directement à partir de l' documentation de 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'}))

il suffit d'ajouter 'autocomplete'='off' à l'attrayant dict.

23
répondu BJ Homer 2010-04-05 20:39:30

Ajouter l'autocomplete="off" à la balise de formulaire, de sorte que vous n'avez pas à changer le django.l'instance de formulaire.

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

21
répondu jjlorenzo 2010-09-08 22:19:32

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

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

si vous utilisez des modelformes, vous n'aurez pas le luxe de définir des attributs de champ dans la forme. 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 aussi ajouter des attributs de Meta

class CommentForm(forms.ModelForm):
    class Meta:
        widgets = {
            'name': TextInput(attrs={'autocomplete': 'off'}),
        }
3
répondu ChillarAnand 2016-04-12 04:19:48

pour moi ajouter un attribut supplémentaire dans les Modèles a aussi fonctionné:

`<form method="POST", autocomplete="off">
    {% csrf_token %}
    {{ form.as_p }}`
0
répondu Bartosz 2018-09-11 10:29:11