2012-06-13 26 views
1

主要的问题是,是否有任何捆绑许多Django表单到单个实例,要明确什么,我需要解释我的问题的方法:如何捆绑在单一实例多种形式在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 

所有这些形式基本显示/编辑数据库的同一实例---但重用throught在不同配置的应用程序(所以我不能只是手动创建类,将其封装)。

有很多形式在网页中是一个麻烦事,比如我有写这样的代码:

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

我无法通过干净形成财产的观点,因为大多数vievs以这种方式使用多种形式。

是否有任何明智的方式来捆绑这些形式---或者只是我的设计被破坏(如果是的话如何解决它)。

回答

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}) 
+0

嗯,我不喜欢传球字典aroind(尤其是我想以某种方式使传递一个多形式查看参数)。 我可能会酿造一些'MultipleForm'类,它可以做你喜欢的事情,但我并不是那么绝望 - 而且可能有一个现成的解决方案。 尽管如此,这个解决方案肯定比只使用许多变量更好。 –

+0

@jb。你如何想象一个“现成的解决方案”?有些类将四种形式和一个formset与不同的kwargs捆绑在一起?我不认为有人创造了这个。 – DrTyrsa

+0

那么有些类允许我将形式列表传递给构造函数,并提供适用于所有形式的有意义形式的方法和属性。像错误:) –