Django Admin修改模型值保存时出现ValueError错误
解决Django Admin修改用户时的ValueError问题
从你描述的错误invalid literal for int() with base 10: ''来看,核心问题是某个整数类型的字段收到了空字符串值。结合你刚新增preapproved和active两个字段的背景,大概率是这两个字段的定义或Admin配置出了问题,下面一步步排查解决:
1. 检查模型字段定义是否合理
先回忆你新增字段的代码,preapproved(预批准)和active(激活)这类状态字段,更适合用BooleanField而非IntegerField——如果选了Integer类型却没处理空值/默认值,就会触发这个错误:
# 错误示例(IntegerField无默认/允许为空设置) preapproved = models.IntegerField() active = models.IntegerField() # 推荐写法(BooleanField带默认值) preapproved = models.BooleanField(default=False) active = models.BooleanField(default=True)
如果坚持用IntegerField,必须明确允许为空或设置默认值:
preapproved = models.IntegerField(null=True, blank=True, default=0) active = models.IntegerField(null=True, blank=True, default=1)
2. 检查Django Admin的配置
如果你的ProfileTeacherAdmin做了自定义配置,要确保这两个新字段被正确处理:
- 若没自定义表单,确认
ModelAdmin的fields或fieldsets里包含了preapproved和active; - 若自定义了Admin表单,对应添加字段的表单控件时要处理空值,比如用
forms.IntegerField(required=False)或forms.BooleanField(required=False),避免提交空字符串。
3. 修复现有数据库记录的空值
迁移后现有记录的新字段可能是NULL,如果字段没设置null=True,Admin读取时会把NULL转成空字符串,保存时就会报错。可以通过Django Shell批量修复:
python manage.py shell >>> from app_users.models import ProfileTeacher >>> ProfileTeacher.objects.filter(preapproved__isnull=True).update(preapproved=0) >>> ProfileTeacher.objects.filter(active__isnull=True).update(active=1)
4. 验证修复效果
修改完成后,重新运行迁移(如果调整了模型字段):
python manage.py makemigrations python manage.py migrate
再回到Admin界面尝试修改或新建用户,应该就能解决这个错误了。
内容的提问来源于stack exchange,提问作者fmakawa
相关产品推荐
相关产品推荐

