0

__initフォームの__ メソッドをオーバーライドして、選択肢の動的リストを取得するフォームを作成しました。

class AssociateSfnForm(forms.Form):

    chosen_sfns = forms.ChoiceField(label='', widget=forms.CheckboxSelectMultiple)


def __init__(self, sfn_choices, *args, **kwargs):

    super(AssociateSfnForm, self).__init__(*args, **kwargs)

    self.fields['chosen_sfns'].choices = sfn_choices

    print self.fields['chosen_sfns'].choices

選択が無効であることを示す検証エラーが発生し続けることを除いて、すべてが機能します。私の見解では、フォームの検証をテストする前に選択肢のリストを設定します。

def manually_match_sfns(request, cgs335_id):

    cgs335 = get_object_or_404(Cgs335, pk=cgs335_id)

    # number of SFNs to bring back and display to the user
    number = 10
    sfn_choices = get_sfn_choices(cgs335.aircraft, cgs335.flying_date, number)

    if request.method == 'POST':

        form = AssociateSfnForm(sfn_choices, request.POST )

        if form.is_valid():
            --- processing here ----

    else:
        form = AssociateSfnForm(sfn_choices)

    extra_context = {}

    extra_context.update({'cgs335': cgs335})
    extra_context.update({'form': form})

    return render(request, 'sumdata/manually_match_sfns.html', extra_context)

この問題をデバッグするとき、form.fields['chosen_sfns'].choices をチェックし、毎回同じですが、is_valid() メソッドが検証エラーをスローします。

ページ読み込み前の選択肢...

-> return render(request, 'sumdata/manually_match_sfns.html', extra_context)
(Pdb) form.fields['chosen_sfns'].choices
[('149907AUT_26/03/13 15:28:37', '149907AUT_26/03/13 15:28:37 -- 2013-03-26 12:34:02 -- Debrief #1 Post RON Entered By XXXXXX From CGS335# 13103'), ..., ('Irreconcilable', 'Irreconcilable -- Do not try to associate again.'), ('Not Associated', 'Not Associated -- Come back to this one later')]

検証前の選択肢...

-> if form.is_valid():
(Pdb) form.fields['chosen_sfns'].choices
[('149907AUT_26/03/13 15:28:37', '149907AUT_26/03/13 15:28:37 -- 2013-03-26 12:34:02 -- Debrief #1 Post RON Entered By XXXXXX From CGS335# 13103'), ..., ('Irreconcilable', 'Irreconcilable -- Do not try to associate again.'), ('Not Associated', 'Not Associated -- Come back to this one later')]

Irreconcilable を選択したところ、次のエラー メッセージが表示されました。有効な選択肢を選択してください。[u'Irreconcilable'] は利用可能な選択肢の 1 つではありません。

それぞれの場合の選択肢のリストに「不和」が明確に含まれているため、エラーが発生する理由がわかりません。

誰かが私が間違っていることを理解できる場合は、指摘していただければ幸いです。

前もって感謝します。

4

1 に答える 1

0

フィールド タイプとウィジェットの間に不一致がありました。複数選択したかった。

変化する:

chosen_sfns = forms.ChoiceField(label='', widget=forms.CheckboxSelectMultiple)

に:

chosen_sfns = forms.MultipleChoiceField(label='', widget=forms.CheckboxSelectMultiple)
于 2013-06-05T12:25:34.853 に答える