title: Django: When extending User, better to use OneToOneField(User) or ForeignKey(User, unique=True)?
body: <p>I'm finding conflicting information on whether to use <code>OneToOneField(User)</code> or <code>ForeignKey(User, unique=True)</code> when creating a <code>UserProfile</code> model by extending the Django User model.</p>
  
  <p>Is it better to use this?:</p>
  
  <pre><code>class UserProfile(models.Model):
      user = models.ForeignKey(User, unique=True)
  </code></pre>
  
  <p>or this?:</p>
  
  <pre><code>class UserProfile(models.Model):
      user = models.OneToOneField(User)
  </code></pre>
  
  <p>The <a href="http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users" rel="nofollow noreferrer">Django Doc</a> specifies <code>OneToOneField</code>, while the <a href="http://www.djangobook.com/en/1.0/chapter12/#cn222" rel="nofollow noreferrer">Django Book example</a> uses <code>ForeignKey</code>.</p>
  
  <p><a href="http://www.b-list.org/" rel="nofollow noreferrer">James Bennett</a> also has two Blog posts that providing conflicting examples as well:</p>
  
  <ul>
  <li><a href="http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/" rel="nofollow noreferrer">Extending the User Model</a></li>
  <li><a href="http://www.b-list.org/weblog/2006/sep/02/django-tips-user-registration/" rel="nofollow noreferrer">User Registration</a></li>
  </ul>
  
  <p>In the former post, Bennett provides some reasons why he switched to using <code>ForeignKey</code> instead of <code>OneToOneField</code>, but I don't quite get it, especially when I see other posts that recommend the opposite.</p>
  
  <p>I'm curious to know your preference and why. Or, does it even matter?</p>