在django中的表单上使用cleaning_data

时间:2011-05-08 02:40:10

标签: django django-forms

在传递POST / GET提交的输入值之前,设置cd = form.cleaned_data有什么意义?有什么意义,为什么有必要(如果是这样的话)?

2 个答案:

答案 0 :(得分:23)

在传递输入值之前没有必要使用表单的.cleaned_data属性,如果在绑定表单中调用.is_valid()之前执行它,或者如果您尝试访问它,则会引发AttributeError未绑定的表单,read more about Form.cleaned_data

此外,通常最好在表单方法中抽象使用表单的数据以封装逻辑

在您的观看中,您应该使用表单的传统方式如下:

if request.method == 'POST':
  form = MyForm(request.POST) # Pass the resuest's POST/GET data
  if form.is_valid():         # invoke .is_valid
    form.process() # look how I don't access .cleaned_data in the view

在您的表单中:

class MyForm(forms.Form):
  my_field = forms.CharField()

  def process(self):
    # Assumes .cleaned_data exists because this method is always invoked after .is_valid(), otherwise will raise AttributeError
    cd = self.cleaned_data 
    # do something interesting with your data in cd
    # At this point, .cleaned_data has been used _after_ passing the POST/GET as form's data

答案 1 :(得分:4)

  

一旦is_valid()返回True,您就可以处理表单提交安全,因为它知道它符合表单定义的验证规则。虽然此时您可以直接访问request.POST,但最好访问form.cleaned_data。此数据不仅已经过验证,而且还将为您转换为相关的Python类型。

Processing the data from a form