0

これを達成するために正しいアプローチを取っているかどうかはよくわかりません。私が欲しいのは、事前に入力されたデータを持つmodelformsetによってレンダリングされたフォーム要素を(cssを変更して)/(いくつかのjQueryメソッドを使用して)することです。たとえば、次の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個別の辞書として渡して、情報を表示できることを認識しています。ただし、その場合、動的に生成されたフォームがフォームセットの一部になり、ユーザーが送信ボタンをクリックしたときにすべての情報が保存されるように、フォームをフォームセットに追加するにはどうすればよいですか。

このようなことを達成するための最良のアプローチは何でしょうか?

4

1 に答える 1

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を表示/非表示にすることができます

于 2012-12-21T12:18:25.280 に答える