我需要为身份验证后端创建自定义用户模型。通过网络搜索,我注意到人们创建了两个模型:UserProfile和User。因此,据我所知,UserProfile包含标准用户模型和一些其他字段的继承。 (https://stackoverflow.com/a/6092091/4132352) 那么,有一个问题:那么包含用户模型的是什么呢?或者我只需要一个模型吗?
答案 0 :(得分:3)
不,你误解了几件事。
在Django 1.5之前,没有办法替换或扩展内置的User模型。因此,如果您想添加额外字段,建议的解决方案是提供与User具有一对一关系的UserProfile。
自Django 1.5以来,已经可以定义自己的用户模型并告诉Django使用它来代替内置的用户模型。所以现在建议这样做而不是创建UserProfile。这就是你应该做的:定义从AbstractUser或AbstractBaseUser继承的模型,并将settings.AUTH_USER_MODEL指向它。
答案 1 :(得分:0)
您只需要一个用户模型,它内置于Django内置的所有身份验证逻辑中。 UserProfile应该是与用户具有外键关系的自定义表。此外,您应确保在创建新用户对象时,还会创建用户配置文件。
这段视频很好地解释了如何做到这一点。
答案 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)