如何在使用模型formset时区分模板中已创建的对象和新对象

时间:2012-12-21 10:46:38

标签: django forms django-forms

我不确定我是否采取了正确的方法来实现这一目标。我想要的是(更改css for)/(使用一些jQuery方法)由modelformset呈现的具有预填充数据的表单元素。例如,我有以下modelformset。

    EduFormSet = modelformset_factory(models.CandidateDegree,
                 form=forms.CandidateDegreeForm)
    edu_formset = EduFormSet(prefix='candidate_degree',
                  queryset=models.CandidateDegree.objects\
                           .filter(candidate=can))

当我将此formset传递给template时,它会为所有现有CandidateDegree对象呈现带有预填充数据和空白表单的表单。

我想要实现的不是显示预先填充的表单,而是显示已经创建的对象的数据,并向元素附加一个编辑按钮(使用jQuery),然后显示表单。并在对象列表的末尾显示由formset生成的空白表单。

我知道我可以传递与CandidateDegree相关的所有Candidate个对象作为单独的字典来显示信息。但在这种情况下,如何将表单附加到formset,以便动态生成的表单成为formset的一部分,并在用户单击提交按钮时保存所有信息。

实现这样的目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您不必显示完整的表单,您可以像这样循环遍历表单:

 {% for form in edu_formset %}
      form.FIELDNAME#1.value
      form.FIELDNAME#2.value
      etc.
 {% endfor %}

 <!-- Manually render empty form for new entry -->
 <div class='input'>
     <label>Locality: </label> <input id="FIELDNAME#1" disabled=disabled value="">
     <label>Country:  </label> <input id="FIELDNAME#2" disabled=disabled value="">
     etc.
 </div>

因此,您只显示发送到模板的所有对象的数据库值,而不是表单输入。

然后确实用最小的jquery(或普通的javascript)你可以显示/隐藏div.input