Creating a extended user profile Creating a extended user profile django django

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