Django表单,cleaned_data为空
我最近在玩表单,但不太明白为什么 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
这个功能只在模型表单中有用,因为它是针对已经由模型定义的字段进行操作的,但你的表单并不是基于模型的。
你要么使用模型表单,要么在你的表单类中明确地定义你的表单字段。