2

1 ページに 2 つのフォームを使用しています (理由があります)。それらはモデル形式ではありません。プレフィックスを使用してそれらを検証しようとしています。ここで見つけました:Djangoで1つのページで複数のフォームを処理する適切な方法 しかし、cleaned_dataを取得しようとすると、キーエラーが発生します。これが私のコードの一部です:

add_form = AbsenceTypeForm(request.POST, prefix = 'atype')
if add_form.is_valid():
    absence_type = AbsenceType(
        client = client_instance,
        name = add_form.cleaned_data['type_name'],
        gainful = add_form.cleaned_data['gainful'],
    )
    absence_type.save()

そして、type_name に対して KeyError が発生します。追加しようとしましたcleaned_data['atype-type_name']-何も役に立ちません。

4

2 に答える 2

2

取得したキーを確認するためだけに、cleaned_data を画面またはファイルのどこかにダンプするのはどうですか? デバッガーは、ローカルの辞書も表示する必要があります。プレフィックスの紛失/スペルミスか、フォームフィールド名のいずれかだと思います。

ところで、.get() を使用する方が安全であることに同意します (フォームの検証は is_valid() によって既に処理されているように見えますが、将来フィールドを非必須に変更することを決定する可能性があり、このコードはエラー)、したがって:

name = add_form.cleaned_data.get('type_name',None),
gainful = add_form.cleaned_data.get('gainful',None),

if name and gainful:
    pass
    #rest of the code
于 2011-06-26T12:10:46.950 に答える
0

type_name投稿されたフォームを空のままにしたかもしれません。cleaned_data空でないフォームフィールドのキーのみが含まれます。

于 2011-06-26T09:21:03.857 に答える