我有一个要求FloatField和IntegerField的表单。
conc = forms.FloatField(label='Concentration (uM)',required=False)
muxlevel = forms.IntegerField(label='Multiplex level ',required=False)
如果用户输入说0.5,进入muxlevel字段,form.is_valid()返回False,并返回表单
“输入整数。”
这是我的期望(实际上它很棒)。但是如果用户在任一字段中输入文本,例如'asdf',则验证不会抱怨,form.is_valid()返回True,而form.cleaned_data ['muxlevel']的值为None。将文本输入FloatField conc。
也会发生同样的事情这不是我所期望的,我宁愿用户返回到“输入整数”或“输入浮点值”的表格。
我已经搜索过,并没有看到报告此问题。实际上文档说明了......
编辑 - 视图看起来像
from .forms import *
def scr_query(request):
summ = ''
if request.method == "POST":
form = QueryForm(request.POST)
if form.is_valid():
if (form.cleaned_data['conc']):
summ += "Concentration < " + str(form.cleaned_data['conc_upper']) + "<br>"
if (form.cleaned_data['muxlevel']):
summ += "Muxlevel > " + str(form.cleaned_data['muxlevel']) + "<br>"
,表格看起来像这样
class QueryForm(forms.Form):
conc = forms.FloatField(label='Concentration (uM)',required=False)
muxlevel = forms.IntegerField(label='Multiplex level ',required=False)
我的阅读告诉我,实际调用python的float()来检查提供的字符串是否可以强制转换为float。如果我使用float('abc')在控制台上执行此操作,我会得到预期的异常。所以不确定为什么它会转换为无。在调用float()之前是否存在某种形式的文本剥离,因此它得到一个空值,而float('')返回None,如预期的那样?
非常感谢任何协助。
感谢。
答案 0 :(得分:1)
正如@Alasdair所说,问题出在request.POST
上。它不包含字段数据。但原因是小部件。默认情况下,Django使用forms.NumberInput
(取决于你的本地化设置),它可以防止在请求中发送非数字数据。因此,如果您更改为muxlevel = forms.IntegerField(label='Multiplex level ',required=False, widget=forms.TextInput())
,您将看到正确的错误消息。