41

Ciao sto usando la classe del modello django con alcuni campi e un campo password. Invece di visualizzare testo normale normale, voglio visualizzare l'input della password. Ho creato una classe di modello come questo:Come creare il campo di immissione della password in django

class UserForm(ModelForm): 
    class Meta: 
     password = forms.CharField(widget=forms.PasswordInput) 
     model = User 
     widgets = { 
      'password': forms.PasswordInput(), 
     } 

Ma sto ottenendo il seguente errore: NameError: non è definita name 'forme'.

Sto usando django versione 1.4.0. Ho seguito questo collegamento: Django password problems

Sempre ricevendo lo stesso errore. Cosa dovrei fare. Dove mi sto sbagliando.Si prega di aiutare

+0

Ho provato a utilizzare PasswordInput come definizione del campo, che non ha funzionato. Il 'widget = forms.PasswordInput' ha fatto il trucco per far funzionare il mio modulo. – anno1337

risposta

50

È necessario includere quanto segue nelle vostre importazioni;

from django import forms 
+0

Ho provato anche quello ... non sto ottenendo alcun errore ora. ma ottiene lo stesso input di testo per il campo della password. anche votare la domanda non risolverà il mio problema. –

+17

@DarHamid Non sono un supporto tecnico. Ho risposto alla tua domanda, se hai un altro problema - poni un'altra domanda. Ma potresti fare il debug da solo per un po 'di tempo? Potresti aver perso un paio di parentesi da qualche parte? I campi di prima e seconda password potrebbero non avere lo stesso nome? Provare è il modo migliore per imparare. – DrTyrsa

+0

Apprezzo la tua risposta. Ma non ho perso nessuna parentesi o così. Inoltre ho messo il nome del campo password nella classe del modello come quello nel modelForm.Thanks in qualsiasi modo –

50

Il widget deve essere una chiamata di funzione, non una proprietà. Ti mancava la parentesi.

class UserForm(ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model = User 
+0

La parentesi è davvero necessaria? Basta correggere il campo PasswordInput durante l'inizializzazione invece di crearli nuovamente per ogni UserForm. – blacklwhite

+0

Non è vero, Django lo gestisce specificamente con 'if isinstance (widget, tipo): widget = widget()' – kibibu

+0

perché django crea un campo di testo per la password? è ovvio avere un campo Password per l'immissione della password? – Clayton

13

@DrTyrsa è corretta. Non dimenticare le parentesi.

from django.forms import CharField, Form, PasswordInput 

class UserForm(Form): 
    password = CharField(widget=PasswordInput()) 
12

Perché non creare il proprio campo password che è possibile utilizzare in tutti i modelli.

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) 

Così ora nel modello si utilizza

password = PasswordModelField() 
0

E 'molto semplice.

È necessario ottenere il campo modulo password fuori dalla classe Meta.

Problemi correlati