Bonjour, j’utilise la classe de modèles Django avec un champ et un champ de mot de passe. Au lieu d’afficher du texte brut ordinaire, je souhaite afficher la saisie du mot de passe. J'ai créé une classe de modèle comme celle-ci:
class UserForm(ModelForm):
class Meta:
password = forms.CharField(widget=forms.PasswordInput)
model = User
widgets = {
'password': forms.PasswordInput(),
}
Mais j'obtiens l'erreur suivante: NameError: le nom 'formes' n'est pas défini.
J'utilise Django version 1.4.0. J'ai suivi ce lien: Problèmes de mot de passe Django
Toujours avoir la même erreur. Que devrais-je faire. Où est-ce que je me trompe? Merci de l'aide
Vous devez inclure les éléments suivants dans vos importations.
from Django import forms
Le widget doit être un appel de fonction, pas une propriété. Il vous manquait une parenthèse.
class UserForm(ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
Pourquoi ne pas simplement créer votre propre champ de mot de passe que vous pouvez utiliser dans tous vos modèles.
from Django import forms
class PasswordField(forms.CharField):
widget = forms.PasswordInput
class PasswordModelField(models.CharField):
def formfield(self, **kwargs):
defaults = {'form_class': PasswordField}
defaults.update(kwargs)
return super(PasswordModelField, self).formfield(**defaults)
Alors maintenant, dans votre modèle, vous utilisez
password = PasswordModelField()
@DrTyrsa est correct. N'oubliez pas vos parenthèses.
from Django.forms import CharField, Form, PasswordInput
class UserForm(Form):
password = CharField(widget=PasswordInput())
Je l'ai suivi sans aucune importation supplémentaire
from Django import forms
class Loginform(forms.Form):
attrs = {
"type": "password"
}
password = forms.CharField(widget=forms.TextInput(attrs=attrs))
L'idée vient du code source: https://docs.djangoproject.com/fr/2.0/_modules/Django/forms/fields/#CharField
Depuis que cette question a été posée il y a quelques années et qu'elle est bien indexée sur les résultats de recherche, cette réponse pourrait aider certaines personnes venant ici avec le même problème mais utilisant une version plus récente de Django.
J'utilise Django 1.11 mais cela devrait également fonctionner pour Django 2.0.
Compte tenu du fait que vous utilisez un utilisateur de modèle, je supposerai que vous utilisez le modèle User () par défaut de Django.
Puisque le modèle User () a déjà un champ de mot de passe, nous pouvons simplement lui ajouter un widget.
from Django import forms
from Django.contrib.auth.models import User
# also, it will work with a custom user model if needed.
# from .models import User
class UserRegistrationForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'password']
widgets = {
# telling Django your password field in the mode is a password input on the template
'password': forms.PasswordInput()
}
Je suis assez nouveau pour Django, si ma réponse n’est pas assez précise, merci de nous le faire savoir, je me ferai un plaisir de la modifier plus tard.
C'est très simple.
Vous devriez obtenir le champ de formulaire password
dans la classe Meta
.