Es porque no entiendes muchas cosas de Python + Django.
Vamos a examinar linea por linea.
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 originalu = 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 originalu.email = form.cleaned_data['email']
Estoy muy seguro que esto ya lo hace el form.
Código Python:
Ver originalprofile = Profiles()
profile.user = user
profile.url = form.cleaned_data['url']
profile.avatar = form.cleaned_data['avatar']
profile.save()
Esta es la parte buena.
Código Python:
Ver originalreturn 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