可空的 DecimalField 在为空时返回 '此值必须为十进制数字

4 投票
1 回答
9195 浏览
提问于 2025-04-17 06:14

我在我的模型里有一个字段,它的类型是 DecimalField。虽然我在选项里设置了 blank=Truenull=True,但是当我的模型通过表单验证时,如果这个字段是空的,我还是会收到一个错误提示:“这个值必须是一个十进制数字。”难道 DecimalField 不能是空的吗?我可以把这个字段的默认值设为0,但我更希望它可以为空。

注意:这个字段最开始是 允许为空的,但我通过 South 迁移把它改成了可以为空。我已经仔细检查了数据库,确认这个列的设置是 Not NULL? = No。

这是模型中字段的定义:

reqwest_max = models.DecimalField("Maximum $", max_digits=11, decimal_places=2, blank=True, null=True)

ModelForm 的定义是:

class ReqwestDetailsForm(ModelForm):
  details = forms.CharField(widget=forms.Textarea(attrs={'class':'span8'}),
                            label = 'What do you need help with?',
                            required=False)
  reqwest_max = forms.CharField(label = "Will Pay Up To $",
                                required=False)

  class Meta:
    model = Reqwest
    widgets = {
      'tags': TextInput(attrs={'size':75}),
    }

1 个回答

9

你的 forms.CharField 会返回一个空字符串,而不是 None(Python里的空值)。所以它会试着把列设置为 ''(空字符串),而不是 NULL

你可能应该在表单中使用 django.forms.DecimalField。可以查看这个链接了解更多信息:https://docs.djangoproject.com/en/dev/ref/forms/fields/#decimalfield

撰写回答