Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] validando un Email Field, extendiendo el UserCreationForm

Estas en el tema de validando un Email Field, extendiendo el UserCreationForm en el foro de Python en Foros del Web. hola todos, he extendido el UserCreationForm conforme he aprendido en este post de stackoverflow y en este tutorial de django en youtube . Entonces en ...
  #1 (permalink)  
Antiguo 24/01/2014, 14:53
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 5 meses
Puntos: 2
validando un Email Field, extendiendo el UserCreationForm

hola todos, he extendido el UserCreationForm conforme he aprendido en este post de stackoverflow y en este tutorial de django en youtube.

Entonces en forms.py declaro la nueva clase que voy a usar y la paso la clase UserCreationForm de django.contrib.auth.forms:

Código:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class FormRegistroUsuario(UserCreationForm):
	email = forms.EmailField(required = True)
	class Meta:
		model = User
		fields = ('username', 'email', 'password1', 'password2')
	def save(self, commit = True):
		user = super(FormRegistroUsuario, self).save(commit=False)
		user.email = self.cleaned_data['email']

		if commit:
			user.save()
		return user
en mi views.py tengo mi funcion "registrar":

Código:
def registrar(request):
	if request.method == 'POST':
		form = FormRegistroUsuario(request.POST)
		if form.is_valid():
			form.save()
			return HttpResponseRedirect(reverse('perfiles:registro_ok'))
		else:
			user_creation_form = FormRegistroUsuario()
	context = {'user_creation_form': user_creation_form}
	return render(request, 'perfiles/registrar.html', context)
Hasta ahi todo funciona bien.

Pero quisiera evitar que un usuario registre un email que ya esté registrado. No tengo mucha idea de cómo hacer esto. Intenté añadir "unique=True".

Código:
email = forms.EmailField(required = True, unique = True)
Pero me da un 'TypeError: __init__() got an unexpected keyword argument 'unique''. Entiendo que se trata de un FormField no de un ModelField entonces es lógico ese error. Pero no tengo mucha idea de hacia dónde avanzar.

Última edición por stormearth; 24/01/2014 a las 14:59 Razón: no funcionan lo hyperlinks a youtube y a stackoverflow.
  #2 (permalink)  
Antiguo 24/01/2014, 16:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: validando un Email Field, extendiendo el UserCreationForm

No te preocupes, ese checo ya lo hace. Simplemente te dirá que no es valido y en los mensajes de error del formulario te aparecerán.
  #3 (permalink)  
Antiguo 24/01/2014, 19:14
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 10 meses
Puntos: 7
Respuesta: validando un Email Field, extendiendo el UserCreationForm

Hola,

tambien puedes hacer uso de forms.ValidationError()
  #4 (permalink)  
Antiguo 27/01/2014, 09:15
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 5 meses
Puntos: 2
Respuesta: validando un Email Field, extendiendo el UserCreationForm

Hola. He probado de distintas maneras y parece que no le esta haciendo el checkeo al email field. Logré registrar varios usuarios con el mismo email. ¿Tal vez me falta alguna línea de código?.
MacintoshD, cómo me suguieres que utilice forms.ValidationError()? Te lo pregunto porque he encontrado varias formas de usarlo en el internet.

Por lo que veo sí está haciendo algo de validación el formulario puesto que form.is_valid() no me deja crear dos usuarios con el mismo username.
  #5 (permalink)  
Antiguo 27/01/2014, 11:36
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 10 meses
Puntos: 7
Respuesta: validando un Email Field, extendiendo el UserCreationForm

Cita:
Iniciado por stormearth Ver Mensaje
Hola. He probado de distintas maneras y parece que no le esta haciendo el checkeo al email field. Logré registrar varios usuarios con el mismo email. ¿Tal vez me falta alguna línea de código?.
MacintoshD, cómo me suguieres que utilice forms.ValidationError()? Te lo pregunto porque he encontrado varias formas de usarlo en el internet.

Por lo que veo sí está haciendo algo de validación el formulario puesto que form.is_valid() no me deja crear dos usuarios con el mismo username.
Hola,

Por defecto el campo "email" no es único, puedes registrar varios usuarios con el mismo e-mail pero no con el mismo usuario, yo lo que haría es que en el momento de validar el formulario verificar si existe el email y si existe enviar un:

Código Python:
Ver original
  1. raise forms.ValidationError(_("This e-mail already use, please check other e-mail"))

Es sencillo, todo depende de tu código. Si heredas de UserCreationForm() debes reemplazar y crear métodos!

Saludos.

Etiquetas: django, forms
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:33.