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

Django提交空选值时出现Field 'maca' expected a number报错如何解决

问题原因
  • 表单提交空值时,forms.ChoiceField默认会将空选项的值返回为空字符串''
  • 模型层的maca字段是IntegerField类型,仅接受数字、None两种合法值,无法自动将空字符串转换为符合要求的None,因此抛出类型不匹配的报错
  • 你在IntegerChoices中定义的__empty__属性仅会作用于模型字段自动生成的表单选项,或者ModelForm自动映射的字段,手动声明的普通ChoiceField不会触发自动转换空值的逻辑
修复方案

方法1:使用ModelForm自动映射字段(最推荐)

直接继承Django的ModelForm来生成表单,框架会自动根据模型字段的类型做适配,自动将提交的空值转换为None,不需要手动声明maca字段:

# forms.py 代码示例
from django.forms import ModelForm
from .models import Boss

class BossForm(ModelForm):
    class Meta:
        model = Boss
        fields = ['maca'] # 其余需要的字段也可以一起写在列表里

方法2:替换为TypedChoiceField指定类型转换

如果要手动声明表单字段,可以把ChoiceField替换为TypedChoiceField,通过参数指定类型转换规则和空值对应的取值:

# forms.py 修改后的字段代码
maca = forms.TypedChoiceField(
    required=False, 
    choices=Boss.Maca.choices, 
    widget=forms.Select,
    coerce=int, # 将提交的字符串值转换为整数
    empty_value=None # 空值时返回None而非空字符串
)

方法3:自定义字段的clean方法转换空值

也可以给当前表单新增clean_maca方法,手动将空字符串转换为None再传递给模型层:

# 在你的Form类中添加以下代码
def clean_maca(self):
    maca_value = self.cleaned_data.get('maca')
    return maca_value if maca_value else None

内容的提问来源于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 08:36:05