Creando un perfil de usuario extendido

Tengo un modelo de UserProfile extendido en django:

class UserProfile(models.Model):
  user = models.ForeignKey(User, unique=True)
  #other things in that profile

Y una señales.py:

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)

Me aseguro de que la señal se registre al tener esto en mi__init__.py:

import signals

Entonces, eso debería crearme un nuevo UserProfile para cada usuario que se registre, ¿verdad? Pero no lo hace. Siempre obtengo errores de "La consulta de coincidencia de perfil de usuario no existe" cuando intento iniciar sesión, lo que significa que la entrada de la base de datos no está allí.

Debo decir que uso el registro django, que proporciona la señal registrada por el usuario.

La estructura de las aplicaciones importantes para esto es que tengo una aplicación llamada "usuarios", allí tengo: models.py, signal.py, urls.py y views.py (y algunas otras cosas que no deberían importar aquí ). La clase UserProfile se define en models.py.

Actualizar: Cambié las señales.py a:

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)

Pero ahora me sale un "IntegrityError":

"la columna user_id no es única"

Edición 2:

Lo encontré. Parece que de alguna manera he registrado la señal dos veces. La solución para esto se describe aquí:http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave

Tuve que agregar un dispatch_uid, ahora miíclas.py se ve así y está funcionando:

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")

Respuestas a la pregunta(6)

Su respuesta a la pregunta