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

Django IntegerChoices字段提交空值报Field 'maca2' expected a number错误如何解决

问题排查与解决方案

报错根因

你遇到的报错是两个问题共同导致的:

  • 代码缩进错误:maca2字段现在被定义在Maca2内部类的作用域内,不属于Maca模型的字段,Django无法正确识别该字段的类型和choices规则,导致表单提交的空选项值没有被正常转换
  • 表单空选项value异常:正常IntegerChoices的__empty__配置只会设置下拉框的显示文本,空选项的value应为空字符串,你当前提交到后端的值是Select字符串,说明表单配置也存在问题

修复步骤

1. 修正模型缩进和语法

调整maca2字段的缩进层级,和Maca2内部类平级,同时移除choices定义末尾多余的逗号,修正后代码如下:

from django.db import models
from django.utils.translation import gettext_lazy as _

class Maca(models.Model):
    class Maca2(models.IntegerChoices):
        Personal = 1
        Work = 2
        Transport = 3
        __empty__ = _('Select')

    # 字段属于Maca模型,和内部类平级
    maca2 = models.PositiveSmallIntegerField(
        db_column='Maca2', choices=Maca2.choices, null=True, blank=True
    )

2. 校验表单配置

  • 如果你用的是ModelForm,不需要手动配置maca2字段的choices,Django会自动生成空选项value为空字符串的下拉框,提交时会自动把空字符串转换为None存入字段
  • 如果你是手动写的HTML表单,确保空选项的value属性为空,正确写法:
    <option value="">Select</option>
    
    不要把value写成Select。

3. 同步模型到数据库

删除之前错误缩进时生成的Maca模型迁移文件(不要删除迁移目录下的__init__.py),重新执行迁移命令:

python manage.py makemigrations
python manage.py migrate

如果已经有生产环境的迁移记录被应用,需要先回退对应迁移版本再做修改。

修复完成后再提交空值就不会再触发类型错误。

内容的提问来源于stack exchange,提问作者maca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:07