Estoy usando django-registration y estoy tratando de conectarme a sus señales para crear automáticamente un UserProfile.django-registration auto create UserProfile
Definición de la señal:
from django.dispatch import Signal
# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])
señal enviada por django-registro:
def register(self, request, **kwargs):
"""
Create and immediately log in a new user.
"""
username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
User.objects.create_user(username, email, password)
# authenticate() always has to be called before login(), and
# will return the user we just created.
new_user = authenticate(username=username, password=password)
login(request, new_user)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
Mi señal de conexión: se está creando
from registration.signals import *
from core.models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
UserProfile.objects.get_or_create(user=instance)
user_registered.connect(createUserProfile, sender=User)
No hace falta decir que no PerfilUsuario. ¿Que me estoy perdiendo aqui?
¡Muchas gracias!
EDIT: Moví mi conexión() y su método correspondiente a un model.py y aún no tuve suerte.
Nuevo código:
from django.db import models
from django.contrib import auth
from django.contrib.auth import login
from core.forms import AuthForm
from registration.signals import *
from django.contrib.auth.models import User
# Create your models here.
class UserProfile(models.Model) :
user = models.ForeignKey(User, unique=True)
def __unicode__(self):
return self.user.username
def createUserProfile(sender, instance, **kwargs):
print "creating profile"
UserProfile.objects.get_or_create(user=instance)
user_registered.connect(createUserProfile, sender=User)
estoy usando PyCharm de depurar, y en el principio de mi punto de interrupción en user_registered.connect() es golpeado. Así que supongo que connect() se está registrando correctamente. Sin embargo, todavía no veo ejecutar createUserProfile. ¿Me falta algo más?
Gracias!
RESPUESTA: Doh. Mi código de conexión y receptor estaba mal. código correcto:
def createUserProfile(sender, user, request, **kwargs):
UserProfile.objects.get_or_create(user=user)
user_registered.connect(createUserProfile)
di cuenta de que después de leer signals.py en django-registro
He cambiado mi código de acuerdo con su respuesta, pero todavía no tuve suerte. Por favor revisa mis ediciones. ¡Muchas gracias! – rabbid