You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:28:51