修改Django模型后执行migrations admin站点无变化该如何解决?
排查解决步骤
1. 检查admin站点配置
90%的这类问题都是修改模型后没有同步修改admin的字段配置导致的,打开你对应app下的admin.py文件:
- 如果你自定义了Post模型的管理类,检查以下配置项是否包含
title_tag字段:fields/fieldsets:控制新增/编辑页显示的字段,没加的话表单里看不到该字段list_display:控制列表页显示的字段,没加的话列表不会展示该字段exclude:如果配置了排除字段,确认没有把title_tag加进去
示例正确配置参考:
from django.contrib import admin from .models import Post class PostAdmin(admin.ModelAdmin): list_display = ('title', 'title_tag', 'author') fields = ('title', 'title_tag', 'author', 'body') admin.site.register(Post, PostAdmin) - 如果你没有自定义管理类,直接用
admin.site.register(Post)注册,跳过这步往下排查。
2. 确认迁移已正确执行到数据库
makemigrations只是生成迁移文件,需要执行迁移命令才会把变更同步到数据库:
- 执行命令
python manage.py migrate,查看输出日志,确认blog应用的0002迁移已被成功应用,没有报错。 - 如果你之前删除过数据库和迁移文件,建议重新走完整迁移流程:
- 删除blog/migrations目录下除
__init__.py之外的所有文件 - 删除根目录下的db.sqlite3文件
- 执行
python manage.py makemigrations blog - 执行
python manage.py migrate - 执行
python manage.py createsuperuser重新创建管理员账号
- 删除blog/migrations目录下除
3. 验证运行环境缓存问题
- 按
Ctrl+F5强制刷新admin页面,清理浏览器静态资源缓存,也可以换个浏览器打开验证 - 手动停止Django开发服务,重新执行
python manage.py runserver启动服务,避免热重载失效导致代码未生效
4. 底层校验模型字段状态
可以通过Django Shell确认模型字段是否真的生效:
- 执行
python manage.py shell进入交互环境 - 运行以下代码查看Post模型的所有字段:
from blog.models import Post print([field.name for field in Post._meta.fields]) - 如果输出结果包含
title_tag,说明模型和数据库层面都正常,问题一定出在admin配置上;如果没有包含,回到第二步重新执行迁移流程。
内容的提问来源于stack exchange,提问作者macjoloz
相关产品推荐
相关产品推荐

