User和UserProfile模型

时间:2014-10-21 20:56:04

标签: django django-models django-authentication

我需要为身份验证后端创建自定义用户模型。通过网络搜索,我注意到人们创建了两个模型:UserProfile和User。因此,据我所知,UserProfile包含标准用户模型和一些其他字段的继承。 (https://stackoverflow.com/a/6092091/4132352) 那么,有一个问题:那么包含用户模型的是什么呢?或者我只需要一个模型吗?

3 个答案:

答案 0 :(得分:3)

不,你误解了几件事。

在Django 1.5之前,没有办法替换或扩展内置的User模型。因此,如果您想添加额外字段,建议的解决方案是提供与User具有一对一关系的UserProfile。

自Django 1.5以来,已经可以定义自己的用户模型并告诉Django使用它来代替内置的用户模型。所以现在建议这样做而不是创建UserProfile。这就是你应该做的:定义从AbstractUser或AbstractBaseUser继承的模型,并将settings.AUTH_USER_MODEL指向它。

答案 1 :(得分:0)

您只需要一个用户模型,它内置于Django内置的所有身份验证逻辑中。 UserProfile应该是与用户具有外键关系的自定义表。此外,您应确保在创建新用户对象时,还会创建用户配置文件。

这段视频很好地解释了如何做到这一点。

https://www.youtube.com/watch?v=qLRxkStiaUg

答案 2 :(得分:0)

基本上,您现在将用户模型子类化,并让您的设置知道您将使用自定义模型。您可以在documentation

中详细了解相关信息 总的来说是:

创建从用户扩展的模型:

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    id_number = models.CharField(max_length=255, blank=True)

让您的设置模块知道您将使用此模型作为用户模型(settings.py):

AUTH_USER_MODEL = "users.User"

当你要在另一个模型中引用它时,请确保你指向这个类:

class OtherModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)

作为替代方案,为用户创建一个应用程序,并像使用任何其他模型一样导入它:

from users.models import User
class OtherModel(models.Model):
    user = models.ForeignKey(User)