2014-10-30 84 views
1

我一直在玩弄一些形式,似乎不能理解为什么cleaned_data没有给我任何可用的输出(又名字典似乎是完全空的)。 id喜欢做的是在页面上有一个带有两个日期选择器的表单,这样用户就可以选择一个from和date,然后Django将查询一个定期进行热电偶测量并创建一个表的数据库。django forms,cleaned_data是空的

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一些日期/时间数据:{}

所有的i注意的是,该词典是空的{}但是request.POST数据显示2014年10月4日???

任何想法,为什么发生这种情况?

非常感谢大家的理解!

回答

2

你的表单实际上并没有定义任何字段,所以我不知道你期望在clean_data中获得什么。 formfield_callback仅在ModelForm中有用,它在已由模型定义的字段上操作:但您的表单不基于模型。

要么使用模型表单,要么在表单类中明确地定义表单域。

+0

谢谢丹尼尔。不知道我在那里期待什么!大声笑。我花了一些时间练习一些我发现的教程(非常感谢Mike Hibbert为他的Django YouTube系列!!),现在我觉得表单工作流程更加舒适。虽然我仍然不确定如何去创建和验证日期/时间选择器,但我会继续练习基本知识。我只希望我能及时完全理解这个概念。顺便说一句,我会重写你,但我需要15个StackExchange东西之前,我被允许。但再次感谢! – Logic1 2014-11-05 02:02:11