Я использую django-регистрацию и пытаюсь подключиться к ее сигналам, чтобы автоматически создать UserProfile.
Определение сигнала:
from django.dispatch import Signal
# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])
Сигнал при регистрации django:
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
Мой сигнал подключения:
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)
Нет необходимости говорить, что пользовательский профиль не создается. Что мне здесь не хватает?
Большое спасибо!
РЕДАКТИРОВАТЬ: Я переместил свой connect () и соответствующий ему метод в model.py и все еще не повезло.
Новый код:
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)
Я использую Pycharm для отладки, и в самом начале моя точка останова на user_registered.connect () была достигнута. Поэтому я предполагаю, что connect () регистрируется правильно. Тем не менее, я до сих пор не вижу запуска createUserProfile. Что-то еще мне не хватает?
Спасибо!
ОТВЕТ: Doh. Мой код подключения и получения был неверным. Правильный код:
def createUserProfile(sender, user, request, **kwargs):
UserProfile.objects.get_or_create(user=user)
user_registered.connect(createUserProfile)
Понял это после того, как я прочитал сигналы.py в django-регистрации