Django user profile

You have to make a model for the user profile:

class UserProfile(models.Model):  
    user = models.ForeignKey(User, unique=True)
    location = models.CharField(max_length=140)  
    gender = models.CharField(max_length=140)  
    employer = models.ForeignKey(Employer)
    profile_picture = models.ImageField(upload_to='thumbpath', blank=True)

    def __unicode__(self):
        return u'Profile of user: %s' % self.user.username

Then configure in settings.py:

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

Conceptually, OneToOneField is similar to a ForeignKey with unique=True, but the “reverse” side of the relation will directly return a single object. This is the recommended way of extending User class.

class UserProfile(models.Model):  
    user = models.OneToOneField(User)
    ...

Current Django is 1.9 and here are some updates to the outdated accepted answer

  1. use models.OneToOneField(User)
  2. add related_name='profile'
  3. use .__str__() and .format() for Python 3

like so

class UserProfile(models.Model):  
    user = models.OneToOneField(User, related_name='profile')
    location = models.CharField(max_length=140)  
    gender = models.CharField(max_length=140)  
    ...

    def __str__(self):
        return 'Profile of user: {}'.format(self.user.username)

Using related_name you can access a user's profile easily, for example for request.user

request.user.profile.location
request.user.profile.gender

No need for additional lookups.