4

こんにちは、次のような一般的な FormView でフォームセットを使用しました。

class RequestRecommendationView(FormView):
    template_name = "account/stepfour.html"
    form_class = formset_factory(StepFourForm)

    def form_valid(self,form):
        print form.is_valid()
        cleaned_data = form.cleaned_data
        # return redirect(reverse("some_url_name"))

formset_factory のフォームは次のようになります。

class StepFourForm(forms.Form):
    contact_person = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    company = forms.CharField(required=True)
    request_message = forms.CharField(required=True)

私のhtml構造は次のようなものです:

<div style="padding-top:100px;padding-left:10px;">
    <h4> Request a Recommendation </h4>
    <form method="post" action="">
            {% csrf_token %}

            <table id="myForm">
                <tbody>
                {% for f in form %}
                    {% for field in f %}
                        <tr>
                            <td>{{field.label_tag}}</td>
                            <td>{{field}}</td>

                            {% for error in field.errors %}
                            <td><span>{{ error }}</span></td>
                            {% endfor %}
                        </tr>
                    {% endfor %}
                {% endfor %}
                </tbody>
            </table>

            <button class="btn btn-primary btn-xlarge" type="submit" name="submit">Request Now</button>
            {{ form.management_form }}
        </form>
</div>

次に、django-dynamic-formset ( https://code.google.com/p/django-dynamic-formset/ ) を使用して、これらを介して追加のフォームを追加/削除しました。

<script type="text/javascript">
    $(function() {
               $('#myForm tbody').formset();
           })
</script>

問題は次のとおりです。フォームを空のままにしておくと(すべてのフィールドが必要です)、フィールドの1つに入力すると(他のフィールドは入力しないで)、クラスビューのform_valid()に到達できます(そうすべきではありません)。 、エラーに関連するメッセージが正常に表示されます。なぜこうなった ?それを修正するにはどうすればよいですか?form_class を提供しているフォームセットは、このすべての背後にありますか?

4

1 に答える 1