我正在进行一个新项目,要求用户在注册平台时提供用户名、密码、重复密码、地址和电话号码。我希望所有用户都使用这些字段创建。我知道使用AbstractUser模型可以实现这一点,但是人们实现它的各种方式使它很难理解,作为一个初学者,我发现文档更难理解。请问我该怎么做?
AbstractUser
kcugc4gi1#
from django.contrib.auth.models import AbstractUser class User(AbstractUser): employee_id = models.OneToOneField( Employee, on_delete=models.PROTECT, null=True, blank=True, related_name="employees", ) user_level = models.ForeignKey( "user.Designation", on_delete=models.PROTECT, null=True, blank=True ) admin = models.BooleanField(default=False) email = models.EmailField(unique=True) role = models.ForeignKey( CustomRole, on_delete=models.PROTECT, null=True, blank=True ) branch = models.ForeignKey( Branch, on_delete=models.PROTECT, null=True, blank=True ) has_access = models.BooleanField(default=1) USERNAME_FIELD = "email" REQUIRED_FIELDS = ["username"] class Meta: verbose_name_plural = "User"
例如,这是一个从AbstractUser继承的模型,现在AbstractUser已经是一个从AbstractBaseUser继承的模型。现在的问题是什么是抽象模型?答案是,抽象模型是一个基类,你可以在其中定义你想要包含在所有子模型中的字段。Django不会为抽象模型创建任何数据库表。在AbstractUser中,我们有多个字段,如email、username、first_name、last_name等,我们在AbstractUser中定义这些字段时使用,或者覆盖这些字段以修改或更改这些字段,并添加额外属性,如
first_name = models.CharField(_('first name'), max_length=150, blank=True)
这是AbstractUser中已定义的字段,但我们可以将其更改为如下所示
first_name = models.CharField(_('first name'), max_length=40)
在第二个例子中,我删除了blank=True并编辑了max_length。这样你就可以使用它了。不要忘记像这样添加settings.py文件
AUTH_USER_MODEL = "appName.YOurModelName"
1条答案
按热度按时间kcugc4gi1#
例如,这是一个从AbstractUser继承的模型,现在AbstractUser已经是一个从AbstractBaseUser继承的模型。现在的问题是什么是抽象模型?答案是,抽象模型是一个基类,你可以在其中定义你想要包含在所有子模型中的字段。Django不会为抽象模型创建任何数据库表。
在AbstractUser中,我们有多个字段,如email、username、first_name、last_name等,我们在AbstractUser中定义这些字段时使用,或者覆盖这些字段以修改或更改这些字段,并添加额外属性,如
这是AbstractUser中已定义的字段,但我们可以将其更改为如下所示
在第二个例子中,我删除了blank=True并编辑了max_length。这样你就可以使用它了。不要忘记像这样添加settings.py文件