【问题标题】:How to create an extended User Object in Django?如何在 Django 中创建扩展的用户对象?
【发布时间】:2021-06-10 22:07:42
【问题描述】:

我使用官方文档中描述的方法创建了一个模型ExtendedUser 来扩展User Django 内置模型类: https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#extending-the-existing-user-model 这样我就可以从 Django 提供的现有身份验证功能中受益。 一切正常,但我现在想知道,每当我想创建一个新的ExtendedUser,这意味着对于每个ExtendedUser,我还需要创建一个原始的User 来填充一对一的关系?

或者以下还有什么意思:

假设现有的员工 Fred Smith 同时拥有 User 和 Employee 模型,您可以使用 Django 的 标准相关的模型约定[...]

在创建对象的脚本中,这是否意味着以下内容:

u1 = User.objects.create_user(username="u_1", email="u_1@abc.com", password="pw_u_1")   
ext_u_1 = ExtendedUser.objects.create(id=u1.id, user=u1, prop_1="XYZ")

在哪里

class ExtendedUser(models.Model):
    user = models.OneToOneField(User, ...)
    # More properties...

【问题讨论】:

    标签: python django


    【解决方案1】:

    是的,如果您使用 OneToOne 字段进行扩展,则需要创建两个对象,即 User 以及 ExtendedUser 来实现一对一的关系。

    但我建议不要使用 OneToOne 字段,而是覆盖 Django 提供的 AbstractUser 模型来创建 ExtendedUserModel,即使您现在在 ExtendedUserModel 中不需要任何额外的东西。它将帮助您将来轻松地将任何新字段、方法添加到您的用户模型中,并且您无需为单个用户创建两个对象。

    Django 文档中也提出了相同的建议。参考:-https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project

    【讨论】:

    • 酷,我想我最终进入了“扩展”部分,因为项目已经开始了。但我仍然可以轻松调整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多