Hallo, ich benutze die Django-Modellklasse mit einigen Feldern und einem Kennwortfeld. Anstelle von normalem Klartext möchte ich die Passworteingabe anzeigen. Ich habe eine Modellklasse wie diese erstellt:
class UserForm(ModelForm):
class Meta:
password = forms.CharField(widget=forms.PasswordInput)
model = User
widgets = {
'password': forms.PasswordInput(),
}
Ich erhalte jedoch die folgende Fehlermeldung: NameError: Name 'Forms' ist nicht definiert.
Ich benutze Django Version 1.4.0. Ich folgte diesem Link: Django Passwortprobleme
Immer noch der gleiche Fehler. Was soll ich machen. Wo bin ich falsch? Bitte helfen
Sie müssen Folgendes in Ihre Importe aufnehmen:
from Django import forms
Das Widget muss ein Funktionsaufruf sein, keine Eigenschaft. Ihnen fehlten Klammern.
class UserForm(ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
Warum erstellen Sie nicht einfach ein eigenes Kennwortfeld, das Sie in allen Ihren Modellen verwenden können.
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)
Also jetzt in deinem Modell verwenden
password = PasswordModelField()
@ DrTyrsa ist richtig. Vergessen Sie Ihre Klammern nicht.
from Django.forms import CharField, Form, PasswordInput
class UserForm(Form):
password = CharField(widget=PasswordInput())
Ich habe als Folge ohne zusätzlichen Import getan
from Django import forms
class Loginform(forms.Form):
attrs = {
"type": "password"
}
password = forms.CharField(widget=forms.TextInput(attrs=attrs))
Die Idee kommt aus dem Quellcode: https://docs.djangoproject.com/de/2.0/_modules/Django/forms/fields/#CharField
Da diese Frage vor ein paar Jahren gestellt wurde und die Suchergebnisse gut indiziert sind, kann diese Antwort einigen Leuten helfen, die mit demselben Problem hierher kommen, aber eine neuere Django-Version verwenden.
Ich benutze Django 1.11, aber es sollte auch für Django 2.0 funktionieren.
Unter Berücksichtigung der Tatsache, dass Sie einen Modellbenutzer verwenden, gehe ich davon aus, dass Sie das Standardbenutzermodell () von Django verwenden.
Da das User () - Modell bereits ein Kennwortfeld hat, können wir einfach ein Widget hinzufügen.
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()
}
Ich bin ziemlich neu in Django. Wenn meine Antwort nicht genau genug war, lass es uns wissen, ich würde es gerne später bearbeiten.
Was vom OP bei password = forms.Charfield(widget=forms.PasswordInput)
geschrieben wurde, war korrekt. Es gehört einfach nicht in den Abschnitt class Meta:
. Stattdessen sollte es darüber liegen und eine Ebene darunter eingerückt sein class UserForm
....
Es ist sehr einfach.
Sie sollten das password
-Formularfeld aus der Meta
-Klasse abrufen.