1

モデルが関連付けられていないフォームセットがあり、既存のすべてのフォームが有効になったらフォームセットにフォームを追加できるようにしたいので、ドキュメントを読んで、「max_numの値が数値より大きい場合フォームの総数がmax_numを超えない限り、既存のオブジェクトのうち、最大で追加の空白のフォームがフォームセットに追加されます。」(https://docs.djangoproject.com/en/dev/topics/forms/ formsets /#limiting-the-maximum-number-of-forms):

だから私はこれをしました:

FormSet = formset_factory(SomeForm, extra=2, max_num=10)
    if request.method == 'POST':
        formset = FormSet(data=request.POST)
    else:
        formset = FormSet()

この:

<form action="" method="POST">
{{ formset }}
<input type="submit" value="Next" />
</form>

2つの空のフォームが表示されることを期待しています。1つ(または2つ)のフォームに入力して[次へ]を押すと、追加のフォームが表示されます。ただし、有効なフォームが1つまたは2つある場合でも、テンプレートに表示されるフォームは2つだけです。

これはどのように機能するはずですか?ドキュメントを誤解していますか?私のコードは間違っていますか?

4

1 に答える 1

1

私は自分の質問に対する部分的な答えを見つけました:私はそれを機能させましたが、解決策はあまりDjangoのようではないと思います。私は、このようなことが自動的に行われることを期待しています。

とにかく、私はこのように私の見方を変えました:

if request.method == 'POST':
    formset = FormSet(data=request.POST)
    if formset.is_valid():
        clean_data = formset.cleaned_data
        if not any(not(len(f)) for f in clean_data):
            formset = FormSet(initial=clean_data)
else:
    formset = FormSet()

そこで、POSTデータのcleaned_dataを使用してフォームセットを再インスタンス化し、空のフォームがまだあるときに[次へ]を押した場合に余分なフォームがポップアップしないようにするためにいくつかのものを追加しました。

それは機能しますが、私はこれがこれを行う方法であるべきではないと本当に思います。

于 2012-10-12T02:35:45.123 に答える