エンドユーザーがクイズを追加できる管理フォームがあり、クイズに回答があります。クイズを編集すると、クイズの回答セクションに4行のクイズの回答が表示されます。最初の3つには0、1、2の番号が付けられ、4つ目は__prefix__
です。
例:
<input name="quizanswer_set-0-text" value="one" class="vTextField" maxlength="255" type="text" id="id_quizanswer_set-0-text" />
<input id="id_quizanswer_set-__prefix__-text" type="text" class="vTextField" name="quizanswer_set-__prefix__-text" maxlength="255" />
フォームが処理されると、4番目の入力がスキップされます。これは、プレフィックスが探しているものではないと想定しているためです。
テンプレートコード:
{% for inline_admin_form in inline_admin_formset %}
{{ inline_admin_form.pk_field.field }} {{ inline_admin_form.fk_field.field }}
形:
class QuizAnswerInlineFormSet(forms.models.BaseInlineFormSet):
def is_valid(self):
# make sure errors are populated
_ = self.errors
return super(QuizAnswerInlineFormSet, self).is_valid()
def clean(self):
super(QuizAnswerInlineFormSet, self).clean()
answer_count = 0
correct_count = 0
for form in self.forms:
if not hasattr(form, 'cleaned_data'):
continue
if not form.cleaned_data:
continue
if not form.is_valid():
continue
if form.cleaned_data[forms.formsets.DELETION_FIELD_NAME]:
continue
answer_count += 1
if form.cleaned_data.get("is_correct", False):
correct_count += 1
if answer_count < 2:
raise ValidationError("Questions must have at least 2 answers")
if correct_count != 1:
raise ValidationError("There must be exactly one correct answer")
なぜこれが__PREFIX__
数字ではなく印刷になるのか、誰かが知っていますか?このために設定する必要があるものはありますか?私はもともとフォームを作成していませんでした。修正しようとしているだけで、このタイプのフォームにはあまり詳しくありません。