基于POST中的数据,Django formset中的初始表单数量越来越多?

时间:2012-02-23 12:53:50

标签: python django django-forms

我的页面上有django formsets,有几个额外的表单;我只想向用户(最初)显示已包含数据的表单。

目前我通过将每个表单呈现为隐藏来处理此问题:

{% for form in incorporate_directors_formset %}
<tbody class="incorporate_directors_formset_div subform incorporate_directors_formset_invisible_div" id="incorporate_directors_formset_div_{{ forloop.counter }}">
        {{ form }}
</tbody>
<tr class="magic-last-row invisible"><td colspan=2><div></div></td></tr>
{% endfor %}

[.incorporate_directors_formset_invisible_div只设置display:none;]

然后使用javascript来公开已有数据的那些:

  for(i = directors_initialforms.val(); i > 0; i--)
        director_form_to_display($('.incorporate_directors_formset_invisible_div').first(), false);

[director_form_to_display几乎只删除了课程.incorporate_directors_formset_invisible_div并增加了TOTAL_FORMS次数

到目前为止,这么好。当formset只包含初始数据时,这非常有效。

现在,我的问题是,当某个数据在表单中输入,并且表单验证为无效时,INITIAL_FORMS值仍然保持原来的状态,因此上面的代码不会显示现有的,但是错误的,形式。

在我看来,如何增加INITIAL_FORMS计数以匹配浏览器发回的TOTAL_FORMS计数?或者,或者,确保INITIAL_FORMS计数足够大?

我尝试了holding_formset.initial_forms = holding_formset.forms,但这给了:

Traceback (most recent call last):

File "<debugger>", line 1, in <module>
holding_formset.initial_forms = holding_formset.forms
AttributeError: can't set attribute

1 个答案:

答案 0 :(得分:0)

事实证明,解决方案是使用formset的管理表单来修改实际的请求数据:

from django.forms.formsets import INITIAL_FORM_COUNT
if formset.initial_form_count() < formset.total_form_count():
    manform = formset.management_form
    prefixed_name = manform.add_prefix(INITIAL_FORM_COUNT)
    manform.data[prefixed_name] = formset.total_form_count()