误删django_admin_log表导致Django Admin无法使用的技术求助
修复误删
django_admin_log表导致的Django Admin无法使用问题 嘿,我之前也踩过类似的坑——你把Django Admin核心的操作日志表django_admin_log删掉了,这就难怪后台会抛出ProgrammingError: relation "django_admin_log" does not exist的错误了。别慌,咱们一步步把它恢复回来:
步骤1:确认迁移状态
首先得看看Django的迁移记录里,admin模块的初始迁移是不是还标记为已应用。执行这条命令:
python manage.py showmigrations admin
如果输出里0001_initial前面有个[X],说明迁移记录还在,但对应的表已经被你删掉了,这时候直接migrate不会重新创建表。
步骤2:重建django_admin_log表
这里有两种靠谱的方法,选一种就行:
方法一:直接执行SQL创建表
你已经用sqlmigrate看到了创建表的SQL,直接把它跑进数据库就行:
- 重新执行命令,把完整的SQL输出复制下来:
要复制从python manage.py sqlmigrate admin 0001BEGIN;到COMMIT;的全部内容。 - 进入你的数据库命令行(比如你用的PostgreSQL,就执行
psql db1),把复制的SQL粘贴进去执行,回车后表就重建好了。
方法二:通过迁移命令重新应用
如果不想手动跑SQL,可以让Django帮你重新执行迁移:
- 先把admin模块的迁移记录标记为未应用(
--fake参数不会真的修改数据库,只是改迁移状态):python manage.py migrate --fake admin zero - 然后重新应用admin模块的所有迁移:
这时候Django就会自动创建python manage.py migrate admindjango_admin_log表了。
步骤3:验证修复
启动开发服务器:
python manage.py runserver
然后访问你的Admin后台,应该就能正常使用了。
注意:如果是生产环境操作,一定要先备份数据库,避免出现意外!
内容的提问来源于stack exchange,提问作者DKostyuk
相关产品推荐
相关产品推荐

