私のテンプレートには次のものがあります:
{% for link in solution_list %}
<form id="marked_solved_form{{link.id}}" action="" method="post">
{{mark_solved_form.is_solution}}
{% csrf_token %}
<label for="id_is_solution{{link.id}}">test form</label>
<input type="hidden" name="next" value="{{ request.path }}"/>
</form>
{% endfor %}
is_solution は、ユーザーが設定できるチェックボックスの単なるブールフィールドです。
私が直面している問題は、{{mark_solved_form.is_solution}} を除いて、すべてのフォームに id="marked_solved_form3" のような ID が正しく入力されることです。モデルフォームに移動して属性を編集するだけでよいと思いました。
class PostMarkedSolved(ModelForm):
class Meta:
model = MarkedSolved
def __init__(self, *args, **kwargs):
super(PostMarkedSolved, self).__init__(*args, **kwargs)
#self.fields['is_solution'].queryset = Factory.objects.all()
self.fields['is_solution'].widget.attrs={'onchange':'this.form.submit();', 'class':'testing{{link.id}}', 'id':'testing{{link.id}}'}
ここまでは順調ですね。フォームが読み込まれるときを除いて、すべてのリスト フォームのすべてのチェックボックスに対して次の結果が得られます。
<input name="is_solution" type="checkbox" class="testing{{link.id}}" onchange="this.form.submit();" id="testing{{link.id}}">
モデルフォームがテンプレートタグ {{link.id}} を一緒にエスケープしていることを django が無視しているようです。理想的には、フォーム インスタンスごとに次のようなものを返します。
<td>
<form id="marked_solved_form3" action="" method="post">
<input name="is_solution" type="checkbox" class="testing3" onclick="this.form.submit();" id="testing3" />
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='bwuXYhSpQA8yEOEPSaCt3wAANC0kR7CE' /></div>
<label for="id_is_solution3" onclick="this.form.submit();">test form</label>
<input type="hidden" name="next" value="/task/1"/>
</form>
</td>
<td>
<form id="marked_solved_form4" action="" method="post">
<input name="is_solution" type="checkbox" class="testing4" onclick="this.form.submit();" id="testing4" />
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='bwuXYhSpQA8yEOEPSaCt3wAANC0kR7CE' /></div>
<label for="id_is_solution4" onclick="this.form.submit();">test form</label>
<input type="hidden" name="next" value="/task/1"/>
</form>
</td>
私はdjango-widget-tweaksをインストールするところまで行きました(これは素晴らしいです!)、やってみました:
{{mark_solved_form.is_solution|attr:"id:id_is_solution{{link.id}}"}}
ただし、別のテンプレート タグ内で {{link.id}} を処理できないため、窒息しました。:(どんな提案でもいただければ幸いです。よろしくお願いします!