Создание расширенного профиля пользователя
У меня есть расширенная модель UserProfile в Django:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#other things in that profile
И сигналы.
from registration.signals import user_registered
from models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
user_registered.connect(createUserProfile, sender=User)
Я удостоверяюсь, что сигнал зарегистрирован, имея это в моем:__init__.py
import signals
Так что это должно создать мне новый UserProfile для каждого зарегистрированного пользователя, верно? Но это нет. Я всегда получаюЗапрос соответствия UserProfile не существует " ошибки при попытке войти, это означает, что запись базы данных нет там.
Я должен сказать, что я использую django-registration, который предоставляет сигнал user_registered.
Структура важных приложений для этого такова, что у меня есть одно приложение под названием "пользователей», там у меня есть: models.py, signal.py, urls.py и views.py (и некоторые другие вещи, которые не должныне имеет значения здесь). Класс UserProfile определяется в models.py.
Обновить: Я изменил signal.py на:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile()
profile.user = user
profile.save()
post_save.connect(create_profile, sender=User)
Но теперь я получаюIntegrityError ":"
столбец user_id не уникален
Изменить 2:
Я нашел это. Похоже, я как-то зарегистрировал сигнал дважды. Обходной путь для этого описан здесь:http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave
Мне пришлось добавить dispatch_uid, теперь мой signal.py выглядит так и работает:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from models import UserProfile
from django.db import models
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile(user=user)
profile.save()
post_save.connect(create_profile, sender=User, dispatch_uid="users-profilecreation-signal")