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 originalfrom django.contrib.auth.models import User
class Profiles(models.Model):
user = models.OneToOneField(User)
url = models.URLField()
avatar = models.ImageField(upload_to='profile_avatar')
def __str__(self):
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 originalfrom django import forms
from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
email = forms.EmailField()
url = forms.URLField()
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 originalfrom django.views.generic import FormView
from .forms import UserForm
from django.core.urlresolvers import reverse_lazy
from .models import Profiles
from django.contrib.auth.models import User
class SignIn(FormView):
template_name = 'index/signin.html'
form_class = UserForm
success_url = reverse_lazy('signin')
def form_valid(self, form):
user = form.save()
u = User.objects.get(username=str(user))
u.email = form.cleaned_data['email']
profile = Profiles()
profile.user = user
profile.url = form.cleaned_data['url']
profile.avatar = form.cleaned_data['avatar']
profile.save()
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