1

エンドユーザーがクイズを追加できる管理フォームがあり、クイズに回答があります。クイズを編集すると、クイズの回答セクションに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__数字ではなく印刷になるのか、誰かが知っていますか?このために設定する必要があるものはありますか?私はもともとフォームを作成していませんでした。修正しようとしているだけで、このタイプのフォームにはあまり詳しくありません。

4

2 に答える 2

1

同じ問題がありました。その行は表示されるべきではないことがわかりました。これは、新しい行を追加するときに JavaScript によってテンプレートとして使用され、プレフィックスが置き換えられます。

適切に拾っていないことがわかったので、を持つクラスforms.cssの定義を見つけることができませんでした。empty-formdisplay: none

于 2012-08-28T14:43:03.167 に答える