【问题标题】:Extra form on ModelFormSetModelFormSet 上的额外表单
【发布时间】:2018-07-23 17:36:01
【问题描述】:

对于我的 Django 项目,我在模板中渲染模型表单集 election_formset = modelformset_factory(Election, exclude=('Complete',), formset=BaseElectionFormSet)

<form method="post" action="">
    {{ formset.management_form }}
    {% for form in formset %}
        <div class='card'>
            <div class='card-body w-75 mx-auto'>

                <div class='row'>
                    <div class='col-6 text-center'>
                        <p>Name<br>{{form.Name}}</p>
                    </div>
                    <div class='col-6 text-center'>
                        <p>Videos<br>{{form.FlipGrid}}</p>
                    </div>
                </div>
                <div class='row'>
                    <div class='col-12 text-center'>
                        <p>Description<br>{{form.Description}}</p>
                    </div>
                </div>
                <div class='row'>
                    <div class='col-6 text-center'>
                        <p>Allow registration: {{form.CandidateReg}}</p>
                    </div>
                    <div class='col-6 text-center'>
                        <p>Allow voting: {{form.VotingOpen}}</p>
                    </div>
                </div>
            </div>
        </div>
    {% endfor %}
</form>

当表单集呈现时,表单末尾会显示一个额外的空白表单。我只希望表单显示现有记录的实例。为什么会有一个额外的空白表单集,我该如何防止它?

【问题讨论】:

    标签: python html django django-forms django-templates


    【解决方案1】:

    如果formset中有一些初始数据,尝试使用max_num参数限制exta:

    election_formset = modelformset_factory(Election, exclude=('Complete',), formset=BaseElectionFormSet, max_num=1)
    

    来自文档:

    如果初始数据中的项数超过max_num,无论max_num的值如何,都会显示所有初始数据形式,不会显示多余的形式。

    【讨论】:

      【解决方案2】:

      试试这个

      election_formset = modelformset_factory(
          Election,
          exclude=('Complete',),
          formset=BaseElectionFormSet,
          extra=0
      )
      

      extra 关键字默认为 1,否则(参见 docs):

      def modelformset_factory(model, form=ModelForm, formfield_callback=None,
                               formset=BaseModelFormSet, extra=1, can_delete=False,
                               can_order=False, max_num=None, fields=None, exclude=None,
                               widgets=None, validate_max=False, localized_fields=None,
                               labels=None, help_texts=None, error_messages=None,
                               min_num=None, validate_min=False, field_classes=None):
      

      【讨论】:

        猜你喜欢
        • 2015-10-05
        • 2020-05-06
        • 2013-02-01
        • 2015-01-20
        • 2021-04-03
        • 1970-01-01
        • 2023-03-28
        • 2014-03-31
        • 1970-01-01
        相关资源
        最近更新 更多