Creating a extended user profile
You can implement it using post_save on the user:
from django.db.models.signals import post_savefrom models import UserProfilefrom django.contrib.auth.models import Userdef create_profile(sender, **kwargs): user = kwargs["instance"] if kwargs["created"]: profile = users.models.UserProfile() profile.setUser(sender) profile.save()post_save.connect(create_profile, sender=User)
Edit:
Another possible solution, which is tested and works (I'm using it on my site):
from django.db import modelsfrom django.contrib.auth.models import Userfrom django.db.models.signals import post_savedef create_profile(sender, **kwargs): user = kwargs["instance"] if kwargs["created"]: up = UserProfile(user=user, stuff=1, thing=2) up.save()post_save.connect(create_profile, sender=User)
You can get the extended profile to be created when first accessed for each user instead:
from django.db import modelsfrom django.contrib.auth.models import Userclass UserProfile(models.Model): user = models.ForeignKey(User, unique=True) additional_info_field = models.CharField(max_length=50)User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
then use
from django.contrib.auth.models import Useruser = User.objects.get(pk=1)user.profile.additional_info_field
ref: http://www.codekoala.com/blog/2009/quick-django-tip-user-profiles/
This helped me: primary_key=True
class UserProfile(models.Model): user = models.OneToOneField(User, unique=True, primary_key=True, related_name="user") phone = models.CharField(('phone'),max_length=30, blank=False, null=True) user_building = models.ManyToManyField(Building, blank=True) added_by = models.ForeignKey(User, blank=True, null=True, related_name="added")