Django无法在FloatField中保存空白值



我在Django中有一个简单的模型:

class Test(models.Model):
name = models.FloatField(default=0.0, blank=True)

在我的views.py中,我从页面获取用户输入。html代码为:

<form action="{% url 'test' %}" method="POST">
{% csrf_token %}
<input type="number" placeholder="Test" class="form-control mb-2" name="test">
<input type="submit" class="btn btn-primary" value="Submit">
</form>

views.py代码为:

name = request.POST.get('test', '0.0')      #I have tried without the '0.0' as well.
new_test = Test(name=name)
new_test.save()

我一直收到错误:

ValueError at /test 
Field 'name' expected a number but got ''.

当用户什么都不输入时,我如何让django保存一个空值或"0.0"(默认值(或空值。它似乎不接受这些。

您的字段nameFloatField,因此它需要数字,因此当一个空字符串(''(传递给它时,您会得到一个错误。request.POST.get('test', '0.0')不起作用,因为当用户提交字段时,字段值保持为空字符串,这意味着密钥存在于request.POST中,但其值为''

通常,如果使用Form类[Django-docs]或ModelForm类,这些值会被表单自动清除,并被None替换。我建议你使用表单类。如果你仍然坚持手动操作,你会像这样清理价值:

from django.core import validators

name = request.POST.get('test', '0.0')
if name in validators.EMPTY_VALUES: # if name in (None, '', [], (), {})
name = None
else:
name = float(name) # Might still get error here, if receiving non-numeric input
new_test = Test(name=name)
new_test.save()

注意:这只是清理和验证的一小部分,这里可能会出现更多错误,例如用户在字段中输入非数字输入等。我建议使用表单类。

你必须使用这样的东西:

name = models.FloatField(null=True, blank=True, default=0.0)

最新更新