【问题标题】:Additional auth tables when extending Djangos AbstractUser扩展 Django AbstractUser 时的附加身份验证表
【发布时间】:2021-08-21 18:15:35
【问题描述】:

我是 Django 新手,发现了一些我不太明白的东西:我使用自定义字段扩展了 django auth 的默认用户类,如下所示:

class User(AbstractUser):
    business_entity = models.ForeignKey('BusinessEntity', on_delete=models.PROTECT)

在设置文件中,我还添加了所需的AUTH_USER_MODEL = 'core.User',因为我的新用户模型位于核心应用程序中。到目前为止工作正常。

在应用所有迁移之后(即使在擦除数据库并重新应用之后),我还剩下一些我不想创建的额外表,并且 Django 的身份验证应用程序似乎没有使用这些表: Tables created after migration

如您所见,来自 auth 应用程序:auth_group、auth_group_permissions 和 auth_permissions 以及来自核心应用程序:core_user_groups、core_user_user_permissions。

我搜索了很长时间 - 可能是错误的关键字? - 但我无法弄清楚我是否需​​要所有这些表,尤其是 - 额外的核心表用于什么。你能解释一下吗?

非常感谢!

【问题讨论】:

  • 它们来自django.contrib.auth,有些来自模型中的ManyToManyFields(例如core_user_groups是前缀核心,因为它是AbstractUser中的m2m,因此是您的用户模型也有)。有关详细信息,请参阅Using the Django authentication system (Django docs)
  • 这很有意义,我没有想到 ManyToManyFields 需要额外的表。谢谢你的回答!

标签: python django django-models django-users


【解决方案1】:

我很确定这些是 django 用来存储权限的表,您不应该删除它们。例如,当您创建超级用户(管理员)时,django 知道只有他/她可以访问/admin 页面。这些知识来自存储在这些表中的权限。

如果您不使用这些表,它们可能只占用最少的空间(根据下面的链接,默认情况下只添加 4 个权限),您不必担心它们。也就是说,根据您的项目,了解如何妥善管理权限会大有帮助。

有关权限的更多信息可以查看here

【讨论】:

  • 感谢您的回答。是的,这很有意义,一旦我开始为用户分配单一权限,Django 就需要 Many2ManyField 的这些表。感谢您清除它!
猜你喜欢
  • 2011-07-25
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2012-08-29
  • 2019-11-25
  • 1970-01-01
  • 2012-06-22
相关资源
最近更新 更多