我的页面上有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
答案 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()