Django 管理员组权限列表中的额外表

Posted

技术标签:

【中文标题】Django 管理员组权限列表中的额外表【英文标题】:Extra tables in Django's admin group permission list 【发布时间】:2021-12-09 20:56:22 【问题描述】:

我昨天运行了一些假迁移,昨天还直接重命名了我的数据库的一些表,原因是外键约束和其他类似的错误,Django 在重命名一些模型后不断向我抛出。

我知道这不是标准程序,而且很容易搞砸。不过,它确实为我解决了所有问题,而无需像我几乎下定决心那样清除数据库。

无论如何,正如我所说,一切都很好,期待组管理中“可用权限”中显示的列表。以下(和其他)表不在数据库中,实际上甚至没有以应用程序名称为前缀:

这些来自哪里?我怎样才能摆脱它们?

【问题讨论】:

这些存储在auth_permission 表中。使用 Dbeaver 等数据库管理器连接到数据库,以便您可以查看/删除它们。 太棒了,非常感谢!如果你写一个答案,我会接受。 PS:我想由于主键约束,我无法删除这些行。他们引用的表不存在。强制删除它们是否安全,或者有没有办法重置 auth_permissions 表? 你也可以删除约束。但请确保您知道要删除的内容。先做备份。 【参考方案1】:

您可以使用 django shell 来获取旧权限,如下所示:

from django.contrib.auth.models import Permission

# Assume that you have all name of the old permissions  to delete in a list
permission_old = ['permission_name_1', 'permission_name_2', ...]

for perm in Permission.objects.all():
    if str(perm) in permission_old:
        print(perm)
        perm.delete()

阅读this post

【讨论】:

感谢您的回答,特别是链接我发现存在 remove_stale_contenttypes 选项的帖子,这正是我想要的。【参考方案2】:

感谢@Rvector 的回答,我被指向this post,this answer 让我知道了remove_stale_contenttypes 命令

[d]删除数据库中的陈旧内容类型(从已删除的模型中)。 任何依赖于已删除内容类型的对象也将 已删除。

【讨论】:

以上是关于Django 管理员组权限列表中的额外表的主要内容,如果未能解决你的问题,请参考以下文章

未授予 Django 管理员访问权限

如何在Django中获取具有特定权限组的所有用户的列表

Django实战1-权限管理功能实现-07:组织架构列表展示

授予“用户更改”权限时,如何防止 Django 管理员中的权限升级?

Django 检查并设置用户组的权限

管理员中的 Django 自定义用户模型应用程序级别权限管理