2012-07-13 60 views
4

我想创建一个表单和validation_forms如果要是另一个盒子已核对无误在一个盒子一些文本apears会检查,缺少cleaned_data

class Contact_form(forms.Form): 

def __init__(self): 

    TYPE_CHOICE = (
    ('C', ('Client')), 
    ('F', ('Facture')), 
    ('V', ('Visite')) 
    ) 

    self.file_type = forms.ChoiceField(choices = TYPE_CHOICE, widget=forms.RadioSelect) 
    self.file_name = forms.CharField(max_length=200) 
    self.file_cols = forms.CharField(max_length=200, widget=forms.Textarea) 
    self.file_date = forms.DateField() 
    self.file_sep = forms.CharField(max_length=5, initial=';') 
    self.file_header = forms.CharField(max_length=200, initial='0') 

    def __unicode__(self): 
    return self.name 

    # Check if file_cols is correctly filled 
    def clean_cols(self): 
     #cleaned_data = super(Contact_form, self).clean() # Error apears here 
    cleaned_file_type = self.cleaned_data.get(file_type) 
    cleaned_file_cols = self.cleaned_data.get(file_cols) 

    if cleaned_file_type == 'C': 
     if 'client' not in cleaned_file_cols: 
      raise forms.ValidationError("Mandatory fields aren't in collumn descriptor.") 
    if cleaned_file_type == 'F': 
     mandatory_field = ('fact', 'caht', 'fact_dat') 
     for mf in mandatory_field: 
      if mf not in cleaned_file_cols: 
       raise forms.ValidationError("Mandatory fields aren't in collumn descriptor.") 

def contact(request): 

contact_form = Contact_form() 
contact_form.clean_cols() 
return render_to_response('contact.html', {'contact_form' : contact_form}) 

Infortunatly,Django的一直说我认为他没有重新组合clean_data。我知道我错过了关于该文档或某事的一些内容,但是我无法理解这些内容。请帮忙 !

回答

1

当验证单个字段,你的清洁方法应该有如下形式

clean_<name of field> 

例如clean_file_col的名称。然后当您在视图中执行form.is_valid()时,它会自动调用。

命名您的方法clean_cols表明您有一个名为cols的字段,这可能会导致混淆。

在这种情况下,您的validation relies on other fields,因此您应该将clean_col方法重命名为简单clean。这样,当您在视图中执行form.is_valid()时,它将被自动调用。

def clean(self): 
    cleaned_data = super(Contact_form, self).clean() 
    cleaned_file_type = self.cleaned_data.get(file_type) 
    # ... 

最后,在你看来,你有没有束缚你的形式向任何数据,

contact_form = Contact_form() 

所以contact_form.is_valid()总是返回FALSE。您需要将表单与form = ContactForm(request.POST)的发布数据绑定。有关完整的示例和解释,请参阅Django docs for using a form in a view

+0

感谢您的建议,但由于某种原因,当我重命名它来清洁它时,我不打电话contact_form.is_valid()? – cp151 2012-07-13 14:20:54

+1

在您看来,您并没有将表单绑定到任何数据,因此不会调用干净的方法。您需要'contact_form = ContactForm(request.POST)'。有关详细信息,请参阅[文档](https://docs.djangoproject.com/zh/dev/topics/forms/?from=olddocs#using-a-form-in-a-view)。 – Alasdair 2012-07-13 14:27:40