0

通常の反復を使用して、フォームセット内の各フォームのcleaned_dataを取得しようとしています(Djangoのドキュメントに示されているように):

MyFormSet = formset_factory(form=MyForm, formset=MyBaseFormSet)
my_form_set = MyFormSet(request.POST or None, initial = my_data, prefix = 'myform')

その後、各フォームを検証して反復処理し、次のような値を出力しようとしています。

for f in my_form_set.forms:
    print(f.cleaned_data)

しかし、私が得た結果は次のようなものです:

<QueryDict: {"myform-0-field_a" : "this is a", "myform-1-field_a" : "this is second a"}>
<QueryDict: {"myform-0-field_a" : "this is a", "myform-1-field_a" : "this is second a"}>

キーと値の個々のペアを取得することを期待していましたが、代わりに、反復ごとに POST データ全体を取得します。

私は次のようなものを期待していました:

反復 0:

"field_a" : "this is a"

反復 1:

"field_a" : "this is second a"

どこが恋しいですか?

ありがとう

4

1 に答える 1

2

各フォーム フィールドのラベルは一意である必要があります。そうしないと、どのフォームからどのデータが取得されたかを知る方法がありません。"myform-0-field_a" 、 "myform-1-field_a" はキー/ラベルです。ブラウザはすべてのフィールドを 1 回の投稿で送信します。

f.cleaned データ シームはサブクラス化された dict になるため、これはおそらく機能します

    for k, v in f.cleaned_data.items():
        print k.split('-')[-1], v

https://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects

于 2011-06-22T07:43:38.377 に答える