1

主な質問は、私の問題を説明するために必要なものを明確にするために、多くのdjangoフォームを単一のインスタンスにバンドルする方法があるかどうかです:

単一のビューを表示するために連携する必要がある一連のフォーム クラスを作成しました。

    from_form = move_forms.WaypointForm(prefix="marker-from", instance=move.from_place)
    to_form = move_forms.WaypointForm(prefix="marker-to", instance=move.to_place)
    #Notice that last two form are of the same class 
    through = ThroughFormset(prefix="through", queryset=move.waypoints_db.all())
    path_form = move_forms.CarMovePathForm(path=move.path)
    date_form = move_forms.MoveForm(instance=move)

    #put all this into context instance and render

これらのフォームはすべて、基本的にデータベースの同じインスタンスを表示/編集します --- ただし、アプリ全体で異なる構成で再利用されます (したがって、カプセル化するクラスを手動で作成することはできません)。

Web ページに多くのフォームがあるのは面倒です。たとえば、次のようなコードを書かなければなりません。

 if transportation_form.is_valid() and from_form.is_valid() and \
    to_form.is_valid() and through.is_valid() and path_form.is_valid():

ほとんどの viev はこのような方法で多くのフォームを使用するため、フォーム プロパティをビューにきれいに渡すことはできません。

これらのフォームをバンドルする賢明な方法はありますか --- または私のデザインが壊れているだけですか (もしそうなら、それを修正する方法)。

4

1 に答える 1

0

これはどうですか

from_form = move_forms.WaypointForm(
    request.POST or None,
    prefix="marker-from",
    instance=move.from_place)
# ... other forms declared the same way

forms = {
    'from_form': from_form,
    'to_form':  to_form,
    # ...
}
if all(f.is_valid() for f in forms.values()):
    # ...
    return redirect('success')
return render(request, 'template.html', {'forms': forms})
于 2012-06-13T09:56:03.800 に答える