Django表单,cleaned_data为空

1 投票
1 回答
1841 浏览
提问于 2025-04-30 17:35

我最近在玩表单,但不太明白为什么 cleaned_data 没有给我任何可用的输出(也就是说,这个字典看起来完全是空的)。我想在一个页面上放一个表单,里面有两个日期选择器,这样用户就可以选择一个开始日期和一个结束日期,然后 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 的一些日期/时间数据:{}

我注意到字典是空的 {},但请求的 POST 数据却显示 10/04/2014???

有没有人知道为什么会这样??

非常感谢大家的帮助,让我更好地理解这个问题!!

暂无标签

1 个回答

2

你的表单其实没有定义任何字段,所以我不知道你期待在清理后的数据中得到什么。formfield_callback 这个功能只在模型表单中有用,因为它是针对已经由模型定义的字段进行操作的,但你的表单并不是基于模型的。

你要么使用模型表单,要么在你的表单类中明确地定义你的表单字段。

撰写回答