No puedo eliminar el contenido de un campo de un formulario si da error al validarlo

151 views
Skip to first unread message

Luis García Merino

unread,
Jun 3, 2010, 11:56:51 AM6/3/10
to djan...@googlegroups.com
Buenas tardes,
estoy haciendo un formulario para cambiar la contraseña en una cuenta
del proyecto en el que estoy trabajando. El formulario tiene tres
campos. Uno para especificar la contraseña, otro para poner la nueva
contraseña y otro para que se repita la nueva contraseña. El formulario
está definido de la siguiente manera:


class CambiarPasswordForm(forms.Form):

def __init__(self, request="", *args, **kwargs):
self.request = request
super(CambiarPasswordForm, self).__init__(*args, **kwargs)

old_password = forms.CharField(
label = u"Antigua contraseña",
widget = forms.PasswordInput(
attrs={'size':'22','maxlength':'20'} ),
required=True
)
new_password = forms.CharField(
label = "Nueva contraseña",
widget = forms.PasswordInput(attrs={'size':'22','maxlength':'20'}),
required=True
)
new_password2 = forms.CharField(
label = "Repita su contraseña",
widget = forms.PasswordInput(attrs={'size':'22','maxlength':'20'}),
required=True
)

def clean_new_password(self):
new_pass = self.request.POST.get('new_password', '')
new_pass2 = self.request.POST.get('new_password2', '')

if new_pass != new_pass2:
del self.cleaned_data['new_password']
del self.cleaned_data['new_password2']

raise forms.ValidationError(u'Los campos para la nueva
contraseña no coinciden')

return new_pass


El problema que tengo es que no sé cómo borrar el contenido de los
campos new_password y new_password2 si falla la validación. En el código
he puesto del self.cleaned_data['new_password'] y del
self.cleaned_data['new_password2'], pero no fiunciona, al recargarse el
formulario aparecen los campos con el contenido que tenían antes de
validar. He googleado un poco, pero no he dado con la solución. Si
alguien pudiese ayudarme...

Muchas gracias y un saludo,

Luis

Luis Garcia

unread,
Jun 4, 2010, 3:08:28 AM6/4/10
to djan...@googlegroups.com
Hola,

Andres Vargas - zodman

unread,
Jun 4, 2010, 12:58:45 PM6/4/10
to djan...@googlegroups.com
esos campos completados los completa el navegador no el formulario!

en recordar contraseña....

2010/6/4 Luis Garcia <lgme...@gmail.com>:

> --
> Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del
> Framework Django de habla hispana" de Grupos de Google.
> Si quieres publicar en este grupo, envía un mensaje de correo
> electrónico a djan...@googlegroups.com
> Para anular la suscripción a este grupo, envíe un mensaje a
> django-es-...@googlegroups.com
> Para obtener más opciones, visita este grupo en
> http://groups.google.com.bo/group/django-es.

refreegrata

unread,
Jul 28, 2010, 6:19:43 PM7/28/10
to Django-es
Hola, yo tengo la misma duda. Sucede en todos los navegadores, y no se
si se puede arreglar.
Por dar un ejemplo, si tengo la siguiente vista para un formulario:

def inicio(request):
if request.method == 'POST':
formLogin = FormLogin(request.POST)
diccionario = {}
if formLogin.is_valid():
user = authenticate(username=request.POST['user],
password=request.POST['password'])
if user is not None and user.is_active:
redireccionar
diccionario['mensaje'] = u'¡Usuario o contraseña errónea!
no se ha podido ingresar al sistema'
else:
diccionario['mensaje'] = u'¡Errores en el formulario!'
diccionario['formLogin'] = formLogin
<-----------------------------esta linea es importante para la
explicacion de mi duda
else:
diccionario = {'formLogin': FormLogin(),}

return render_to_response('login.html', diccionario,
context_instance=RequestContext(request))

Al encontrar errores django me redirigira a la pagina, pero los campos
van a estar llenos con el contenido anterior.
La unica forma de solucionarlo que he encontrado es cambiar la linea
que anote como importante

diccionario['formLogin'] = formLogin es cambiada por
diccionario['formLogin'] = FormLogin()

es decir, una nueva instancia del formulario, sin embargo esto no es
lo que quiero, puesto que a mi me gustaría limpiar solo algunos
campos(los del error y los otros no). Por supuesto que para este
formulario tan pequeño no tiene sentido, pero es por que solo es un
ejemplo. El formulario que quiero limpiar es mas grande.

Espero puedan ayudarme.
Saludos.

On 4 jun, 12:58, Andres Vargas - zodman <zod...@gmail.com> wrote:
> esos campos completados los completa el navegador no el formulario!
>
> en recordar contraseña....
>
> 2010/6/4 Luis Garcia <lgmer...@gmail.com>:
>

Andres Vargas - zodman

unread,
Jul 28, 2010, 7:15:33 PM7/28/10
to djan...@googlegroups.com
No se si funciona pero pasale *formLogin xD pasale el apuntador a la instancia

2010/7/28 refreegrata <refre...@yahoo.com>:

> --
> Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
>  Si quieres publicar en este grupo, envía un mensaje de correo
> electrónico a djan...@googlegroups.com
>  Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
>  Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.

--
Andres Vargas
www.zodman.com.mx

Andres Vargas - zodman

unread,
Jul 28, 2010, 7:16:58 PM7/28/10
to djan...@googlegroups.com
Olvidalo no va a funcionar respondi sin terminar de revisar el codigo

2010/7/28 Andres Vargas - zodman <zod...@gmail.com>:

--
Andres Vargas
www.zodman.com.mx

Jairo Peralta

unread,
Jul 29, 2010, 5:19:19 AM7/29/10
to djan...@googlegroups.com
Hola Luis,
una forma de hacerlo con javascrip(o jquery ;-)) seria asi:

function validate_password() {
   if(document.getElementById("password1").value != document.getElementById("password2").value) {
      return false;
   }
}

Luego estableces en la etiqueta form el evento onsubmit: <form onsubmit="return validate_password()">

Un saludo.

 
--

Jairo Peralta

unread,
Jul 29, 2010, 5:23:36 AM7/29/10
to djan...@googlegroups.com
Perdon, la función javascript quedaría como sigue:

function validate_password() {
   if(document.getElementById("password1").value != document.getElementById("password2").value) {
       document.getElementById("password1").value="";
       document.getElementById("password2").value="";
   return false;
   }
}
Reply all
Reply to author
Forward
0 new messages