做到这一点确实是Django推荐的方法是通过OneToOneField(User)
属性。
扩展现有的用户模型 …
如果你希望存储与相关的信息User
,则可以对包含其他信息字段的模型使用一对一关系。这种一对一模型通常称为配置文件模型,因为它可能存储有关站点用户的与身份验证无关的信息。
也就是说,扩展django.contrib.auth.models.User
和替换它也可以…
替代自定义用户模型 某些项目可能具有身份验证要求,而Django的内置User
模型并不总是适用于此。例如,在某些站点上,使用电子邮件地址代替你的用户名作为你的识别令牌更有意义。
我绝对不会在Django源代码树中更改实际的User类和/或复制和更改auth模块。
注意:不建议使用此答案。如果你使用的是Django 1.7或更高版本,请参见其他答案。
这就是我的方法。
#in models.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
#other fields here
def __str__(self):
return "%s's profile" % self.user
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
#in settings.py
AUTH_PROFILE_MODULE = 'YOURAPP.UserProfile'
user.get_profile().whatever