from django.contrib.auth.models import User from django.db.models.signals import post_save from django.db.models.base import ModelBase from django.db import models class _UserProfileModelBase(ModelBase): # _prepare is not part of the public API and may change def _prepare(cls): super(_UserProfileModelBase, cls)._prepare() def add_profile(sender, instance, created, **kwargs): if created: cls.objects.create(user=instance) # Automatically link profile when a new user is created post_save.connect(add_profile, sender=User, weak=False) class UserProfileModel(models.Model): __metaclass__ = _UserProfileModelBase user = models.OneToOneField(User, primary_key=True, parent_link=True) class Meta: abstract = True