Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/08/2014, 21:09
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extender modelo de usuarios

Es porque no entiendes muchas cosas de Python + Django.

Vamos a examinar linea por linea.

Código Python:
Ver original
  1. user = form.save()
Ok, guardas el usuario. Pero esto tiene consecuencias. Al momento de salvarlo el usuario ya esta en la base de datos

Código Python:
Ver original
  1. u = User.objects.get(username=str(user))
WTF, acabas de guardar el usuario y ya tienes una referencia en la variable user. ¿Porque lo vuelves a obtener de la base de datos?

Código Python:
Ver original
  1. u.email = form.cleaned_data['email']
Estoy muy seguro que esto ya lo hace el form.

Código Python:
Ver original
  1. profile = Profiles()
  2. profile.user = user
  3. profile.url = form.cleaned_data['url']
  4. profile.avatar = form.cleaned_data['avatar']
  5. profile.save()
Esta es la parte buena.

Código Python:
Ver original
  1. return super(SignIn, self).form_valid(form)
Recuerdas el form.save() de alla arriba? Y recuerdas que la parte del email te dije que ya lo hacia el form? Pues sorpresa! cuando ejecutas form_valid. Trata de crear otro usuario, cosa que ya te adelantaste a hacer. Y cual es el resultado? Que ese email ya existe en la db. Y por eso te marca el error de email duplicado.

¿Entonces que debo de hacer?
Lo que debiste de hacer fue: hacer un override del metodo save del formulario. Usar el nuevo usuario que te genera para crear ahora si una instancia de Profile y guardarlo.

Aquí hay un ejemplo: http://stackoverflow.com/questions/5...tionform-basic