Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2014, 08:21
Avatar de kojicomics
kojicomics
 
Fecha de Ingreso: junio-2013
Mensajes: 49
Antigüedad: 11 años, 5 meses
Puntos: 1
Extender modelo de usuarios

Necesito añadir unos campos extra para los usuarios que se registren en mi aplicación, por lo que he creado un modelo 'Profiles' relacionado con su tupla en la tabla User:

Código Python:
Ver original
  1. from django.contrib.auth.models import User
  2.  
  3.  
  4. class Profiles(models.Model):
  5.     user = models.OneToOneField(User)
  6.     url = models.URLField()
  7.     avatar = models.ImageField(upload_to='profile_avatar')
  8.  
  9.     def __str__(self):
  10.         return self.user.username

Después he creado un formulario que pida el email, url y avatar en un fichero 'forms.py':

Código Python:
Ver original
  1. from django import forms
  2. from django.contrib.auth.forms import UserCreationForm
  3.  
  4.  
  5. class UserForm(UserCreationForm):
  6.     email = forms.EmailField()
  7.     url = forms.URLField()
  8.     avatar = forms.ImageField()

Por último defino la clase SignIn que toma los valores del formulario y crea un usuario relacionado con el modelo Profiles:

Código Python:
Ver original
  1. from django.views.generic import FormView
  2. from .forms import UserForm
  3. from django.core.urlresolvers import reverse_lazy
  4. from .models import Profiles
  5. from django.contrib.auth.models import User
  6.  
  7.  
  8. class SignIn(FormView):
  9.     template_name = 'index/signin.html'
  10.     form_class = UserForm
  11.     success_url = reverse_lazy('signin')
  12.  
  13.     def form_valid(self, form):
  14.         user = form.save()
  15.         u = User.objects.get(username=str(user))
  16.         u.email = form.cleaned_data['email']
  17.         profile = Profiles()
  18.         profile.user = user
  19.         profile.url = form.cleaned_data['url']
  20.         profile.avatar = form.cleaned_data['avatar']
  21.         profile.save()
  22.         return super(SignIn, self).form_valid(form)

Al ingresar los datos en el formulario sale el siguiente error: (1062, "Duplicate entry '' for key 'mail'")

Si elimino estas líneas de la vista, todo se crea correctamente pero no se asigna el campo email:
u = User.objects.get(username=str(user))
u.email = form.cleaned_data['email']

¿Cómo puedo ingresar el valor de "email" en el modelo User?

Gracias