Django 3.2使用AutoSlugField时slug值始终为None如何解决
Django AutoSlugField 保存时取值为None 排查解决步骤
- 检查自定义填充函数的定义位置
get_populate_from函数必须定义在Courses模型的上方,如果函数定义在模型之后,Django 加载模型时无法识别该函数,会直接跳过 slug 填充逻辑,最终取值为 None。
- 检查保存实例时
title字段是否有有效值
你当前代码中
title字段设置了null=True,如果保存实例时未给title赋值,或title为空值,get_populate_from函数执行时会因为调用None.replace()抛出隐式异常,autoslug 遇到异常会默认放弃填充,最终 slug 取值为 None。可进入 Django shell 执行测试验证:
from your_app_name.models import Courses test_course = Courses(title="测试课程名称") test_course.save() print(test_course.slug)
- 检查 AutoSlugField 参数配置是否合理
你当前设置了
null=True, blank=True,可先添加always_update=True参数测试是否是首次保存触发逻辑的问题:
slug = AutoSlugField( populate_from=get_populate_from, null=True, blank=True, allow_unicode=True, always_update=True )
如果业务场景不需要手动修改 slug,建议去掉
blank=True,避免表单提交时空值覆盖自动生成的内容。
- 检查模型迁移是否生效
每次修改 AutoSlugField 的字段参数后,都要执行以下迁移命令完成数据库同步,否则参数修改不会生效,填充逻辑也可能不触发:
python manage.py makemigrations python manage.py migrate
- 检查 django-autoslug 版本兼容性
执行
pip show django-autoslug确认安装的版本适配 Django 3.2,部分过高的 autoslug 版本已停止支持 Django 3.2,可降级到兼容版本测试:
pip install django-autoslug==1.9.9
内容的提问来源于stack exchange,提问作者mohamadreza ch
相关产品推荐
相关产品推荐

