1

私は2つのフォームを持つdjangoページを持っています:

class FooForm(forms.Form):
    number = forms.CharField(
        label = "Number",
    )
    num_forms = forms.CharField(
        label = "Num Forms"
    )
...

class BarForm(forms.Form):
    name = forms.CharField(
        label = "Name",
    )
...

1 つは単一のフォームとして表示され、もう 1 つはフォームセットとして表示されます。

def myview(request):
        ...
        num_forms = request.GET['num_forms'])
        formsetFactory = formset_factory(BarForm, extra = num_forms)
        formset = formsetFactory()
        return render(request, 'template.html', {'form': FooForm(user), 'formset':formset, 'num_forms':num_forms)

レイアウトの設定に django-crispy-formsを使用しており、次のように template.html にレンダリングしました。

<form action="{% url myview %}" class="form-horizontal" method="post">
        {% crispy form %}
        {% if num_forms and num_forms > 0 %}
            {% crispy formset formset.form.helper %}
        {% endif %}
 </form>

私が望む動作: のフィールドは、表示formするフォームの数を指定するformsetため、そのフィールドの更新時に、formset表示された多くのフォームがリロードされます。の他のフィールド データは、form消去または変更しないでください。検証は実行できますが、いつ実行するかを制御するオプションが欲しいです。

これを機能させるためにビューやテンプレートを実装する方法を教えてもらえますか? ありがとう!

4

1 に答える 1

0

レスポンスのレンダリング時に FooForm を返すことで、値をリロードできます。

form = FooForm(request.POST)
...
return render(request, 'template.html', {'form': form})

ただし、検証せずに(または返す前に検証をクリアして)戻す方法がわかりません

于 2013-03-06T11:29:01.973 に答える