Я голосую за использование UserProfiles .
Я использую несколько сторонних приложений. И внешний ключ для пользователя всегда будет указывать на auth.models.User.
Пример:
class Article(models.Model):
user = models.ForeignKey('auth.User') # instead of your CustomUser
text = ....
И ваша пользовательская модель пользователя:
class CustomUser(User):
timezone = models.CharField(max_length=50, default='Europe/London')
# Use UserManager to get the create_user method, etc.
objects = UserManager()
Что произойдет, если вы получите доступ к пользовательскому полю через экземпляр Article?
Это вызовет исключение:
u = a_article.user
u.timezone
AttributeError: 'User' object has no attribute 'timezone'
Возможно, это не проблема для вас, и вы не хотите избегать дополнительного запроса к БД.
Но я бы использовал метод get_profile.
ОБНОВЛЕНИЕ май 2013 г.
Начиная с Django 1.5, вы можете расширить модель пользователя по умолчанию или заменить полностью настроенной моделью.
ОБНОВЛЕНИЕ ноябрь 2016 г.
Приведенное выше решение устарело, см. Комментарий от wim