Создание расширенного профиля пользователя

У меня есть расширенная модель 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")

Ответы на вопрос(6)

Ваш ответ на вопрос