Django新增SlugField字段报no such column错误问题咨询
问题原因
- 字段定义不合法:
SlugField是存储URL友好字符串的字段类型,仅接受字符串类型内容,你配置的default=True是布尔值,不符合字段格式要求,会干扰Django迁移文件的生成与执行逻辑。 - 迁移记录未同步清理:Django的数据库表结构完全依赖各app下
migrations目录内的迁移文件生成,仅删除数据库文件、不清理旧迁移记录的情况下,重新执行迁移时会直接复用旧的、不包含slug字段的建表逻辑,不会将新字段写入表结构。 - 运行环境配置错位:PyCharm如果没有绑定正确的Django项目配置,执行迁移操作和运行项目服务时连接的不是同一个数据库,会出现“明明重建了库但还是缺字段”的假象。
解决步骤
- 修正模型字段定义,替换不合法的默认值,参考合法写法:
# 可根据业务需求调整默认值、是否允许为空等配置 slug = models.SlugField(max_length=40, default="", blank=True)
如果需要实现slug根据文章标题自动生成,可以重写模型的save方法,在保存实例时调用django.utils.text.slugify自动填充slug内容,不需要手动设置布尔类默认值。
- 彻底重置本地开发环境的库与迁移记录:
- 停掉当前正在运行的Django开发服务
- 删除项目根目录下的本地数据库文件(默认是
db.sqlite3,如果使用MySQL/PostgreSQL等数据库,手动删除对应业务库后新建空库即可) - 打开
blog_app应用下的migrations目录,删除目录内除__init__.py之外的所有迁移脚本文件(比如0001_initial.py、0002_xxx.py这类历史生成的文件)
- 重新生成并执行全量迁移:
在激活了项目虚拟环境的终端中,进入项目根目录(含manage.py的目录)依次执行以下命令:
python manage.py makemigrations python manage.py migrate
执行完成后可以用数据库客户端打开对应库,查看blog_app_article表结构,确认slug字段已经存在再启动服务。
- 校验PyCharm运行配置:
打开PyCharm右上角的运行/调试配置面板,找到你用的Django服务配置项,确认配置中关联的settings文件路径是当前项目的配置文件,和你执行迁移时读取的DATABASES配置保持一致,避免服务连错数据库。
内容的提问来源于stack exchange,提问作者hupaa
相关产品推荐
相关产品推荐

