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实战1-权限管理功能实现-07:组织架构列表展示