【问题标题】:Django Formset in generic FormView通用 FormView 中的 Django Formset
【发布时间】:2013-09-17 21:37:17
【问题描述】:

您好,我在通用 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>

问题是: 如果我将表单留空(每个字段都是必需的),它会设法到达我的类视图的 form_valid()(尽管它不应该),如果我填写其中一个字段(其他字段未填写),它会显示错误关联消息成功。为什么会这样?我该怎么做才能解决它?是否提供 form_class 一个表单集是所有这一切的背后?

【问题讨论】:

标签: python django formset


【解决方案1】:

这个问题是 6 年前提出的,我发现它是因为我遇到了同样的问题,因为它没有答案,我会提供我找到的解决方案。 根据验证最少表单的文档,您必须提供 min_num 并在 formset_factory 中设置 validate_min=True

formset = formset_factory(your_form, min_num=2, validate_min=True, extra=2)

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多