4

我想创建一个表单和validation_forms,如果另一个框被正确选中,它会检查一些文本是否出现在一个框中,

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})

不幸的是,django 一直告诉我他没有重新整理cleaned_data。我知道我错过了有关文档或其他内容的信息,但我无法理解是什么。请帮忙 !

4

1 回答 1

4

验证单个字段时,您的 clean 方法应该具有表单的名称

clean_<name of field>

例如clean_file_colform.is_valid()然后,当您在视图中执行此操作时,它将自动调用。

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

在这种情况下,您的验证依赖于其他字段,因此您应该将您的clean_col方法重命名为 simple 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。您需要使用 将表单绑定到发布数据。有关在视图中使用表单的完整示例和说明,请参阅Django 文档。form = ContactForm(request.POST)

于 2012-07-13T13:51:14.717 回答