django 正在创建具有附加字段的用户

jv4diomz  于 2023-03-20  发布在  Go
关注(0)|答案(1)|浏览(122)

我正在进行一个新项目,要求用户在注册平台时提供用户名、密码、重复密码、地址和电话号码。我希望所有用户都使用这些字段创建。
我知道使用AbstractUser模型可以实现这一点,但是人们实现它的各种方式使它很难理解,作为一个初学者,我发现文档更难理解。
请问我该怎么做?

kcugc4gi

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"

相关问题