django表单,cleaning_data为空

时间:2014-10-30 20:34:33

标签: python django forms

我一直在玩表格一点点,似乎无法理解为什么cleaning_data没有给我任何可用的输出(又名dict似乎是完全空的)。 id喜欢做的是在页面上有一个带有两个日期选择器的表单,这样用户就可以选择一个来自和到目前为止Django将查询具有周期性热电偶测量值并创建表格的数据库。

views.py

def temperature_data(request):
    date_select_form = CalLabDateSelect(request.POST)

    if request.method == 'POST':        
        if date_select_form.is_valid(): # All validation rules pass
            print "this should be some date/time data from date_select_form:", date_select_form.cleaned_data
            #return HttpResponseRedirect('/test_page/') # Redirect after POST

    raw_data = Callab.objects.all().using('devices').order_by('-time')
    return render_to_response("temperature_display.html",
                              locals(),
                              context_instance=RequestContext(request))

forms.py

def make_custom_datefield(f):
    formfield = f.formfield()
    if isinstance(f, models.DateField):
        formfield.widget.format = '%m/%d/%Y'
        formfield.widget.attrs.update({'class':'datePicker', 'readonly':'true'})
    return formfield

class CalLabDateSelect(forms.Form):
    formfield_callback = make_custom_datefield

当我访问该页面并选择一个日期然后提交表格我看到这个输出到控制台:

  

QueryDict:{u'date':[u'10 / 04/2014'],u'csrfmiddlewaretoken':[u'C5PPlMU3asdFwyma9azFDs4DN33CMmvK']}   
这应该是来自date_select_form的一些日期/时间数据:{}

我注意到的是字典是空的{}但是request.POST数据显示10/04/2014 ???

为什么会发生这种情况?

非常感谢你们帮助理解这一切!!

1 个答案:

答案 0 :(得分:2)

您的表单实际上并未定义任何字段,因此我不知道您希望获得clean_data的内容。 formfield_callback仅在ModelForm中有用,它在已经由模型定义的字段上运行:但您的表单不基于模型。

使用模型表单,或在表单类中明确定义表单字段。