41

Hola, estoy usando la clase de modelo django con algún campo y un campo de contraseña. En lugar de mostrar texto normal sin formato, quiero mostrar la entrada de contraseña. He creado una clase de modelo así:Cómo crear el campo de entrada de contraseña en django

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

pero estoy consiguiendo el error siguiente: NameError: no se define de nombre 'formas'.

Estoy usando django versión 1.4.0. Seguí este enlace: Django password problems

Obteniendo el mismo error. Que debería hacer. ¿Dónde me estoy equivocando? Por favor, ayuda

+0

Intenté usar PasswordInput como la definición del campo, que no funcionó. El 'widget = forms.PasswordInput' hizo el truco para que mi formulario funcionara. – anno1337

Respuesta

50

Necesita incluir lo siguiente en sus importaciones;

from django import forms 
+0

Lo intenté también ... no estoy recibiendo ningún error ahora. pero recibiendo la misma entrada de texto para el campo de contraseña. Además, votar la pregunta no resolverá mi problema. –

+17

@DarHamid No soy soporte técnico. Respondí tu pregunta, si tienes otro problema, haz otra pregunta. Pero puede que deba depurar usted mismo por un tiempo? ¿Puede ser que te hayas perdido un par de paréntesis en alguna parte? ¿Puede ser el primer y segundo campos de contraseña que no deben tener el mismo nombre? Probar es la mejor manera de aprender. – DrTyrsa

+0

Agradezco su respuesta. Pero no he perdido ningún paréntesis más o menos. También he puesto el nombre del campo de contraseña en la clase de modelo igual que en el modeloFormulario. Gracias de cualquier manera –

50

El widget debe ser una llamada a función, no una propiedad. Usted faltaba el paréntesis.

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

¿Los paréntesis son realmente necesarios? Solo corrige el campo PasswordInput durante la inicialización en lugar de crearlos nuevamente para cada UserForm. – blacklwhite

+0

No es cierto, Django maneja esto específicamente con 'if isinstance (widget, type): widget = widget()' – kibibu

+0

¿por qué django crea un campo de texto para la contraseña? es obvio tener un campo de Contraseña para la entrada de contraseña? – Clayton

13

@DrTyrsa es correcto. No olvides tus paréntesis.

from django.forms import CharField, Form, PasswordInput 

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

¿Por qué no acaba de crear su propio campo de contraseña que puede utilizar en todos sus modelos.

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) 

Así que ahora en su modelo que utiliza

password = PasswordModelField() 
0

Es muy simple.

Debe obtener password campo de formulario de clase Meta.

Cuestiones relacionadas