我在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"(默认值(或空值。它似乎不接受这些。
您的字段name
是FloatField
,因此它需要数字,因此当一个空字符串(''
(传递给它时,您会得到一个错误。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)