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_<name of field>

たとえばclean_file_col。その後、ビューで行うと自動的に呼び出さform.is_valid()れます。

メソッドに名前clean_colsを付けると、 という名前のフィールドがあることが示唆されcols、混乱を招く可能性があります。

この場合、検証は他のフィールドに依存する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()

したがって、常にFalse を返しますcontact_form.is_valid()。を使用して、フォームを投稿データにバインドする必要があります。完全な例と説明については、ビューでフォームを使用するための Django ドキュメントを参照してください。form = ContactForm(request.POST)

于 2012-07-13T13:51:14.717 に答える