我正在尝试为旅行创建过程创建SessionWizardView。这次旅行可能有一条腿(单程)或两条腿(往返)。每条腿都有类似的架构,所以我想对步骤0和步骤1使用相同的表格,条件是只在航班往返时使用step1。
我遇到的问题是我的提交"按钮一直反复加载步骤0,而不是继续前进到第1步,因为它应该用于往返飞行。 (我根据先前请求的get_form_initial()覆盖中每条腿的行程信息预先填充每个表格。我的表单正确填充第一段,它只是无限制地填充每个提交广告的第一条腿数据。
我可以制作两种相同的形式,但这似乎是不好的做法。稍微好一些,我可以让回程旅行表格继承自出境旅行表格而不对其进行任何更改 - 这就是我接下来要尝试的更好的解决方案。
但是,我真的想知道是否有办法两次使用同一个表格?
在我的urls.py中:
wizard_forms = [TripCreationForm,TripCreationForm]
urlpatterns = patterns('',
url(r'^trip/wizard/(?P<pk>\d+)$',
views.CreateTripSetView.as_view(wizard_forms,
condition_dict= {'1':show_return_trip_form}), name='admin_add_tripset')
)
在views.py中:
def show_return_trip_form(wizard):
"""
Tells the CreateTripSetView wizard whether to show the return trip form
Args:
wizard:
Returns: True if this is a round trip, false if one-way
"""
cleaned_data = wizard.get_cleaned_data_for_step('0') or {}
if cleaned_data.get('total_legs') == 2:
return True
return False
class CreateTripSetView(SessionWizardView):
def get_form_initial(self, step):
"""
Populates the initial form data based on the request, route etc.
THIS IS ALWAYS FIRING FOR STEP=0 WHEN I HIT SUBMIT.
Args:
step:
Returns:
"""
initial = self.initial_dict.get(step, {})
triprequest = TripRequest.objects.filter(id=self.kwargs['pk']).first()
if triprequest is None:
return initial
initial.update({
'request_id': flight_request.id,
#other fields set on initial here
})
return initial
form.py中的:
class TripCreationForm
#field defs ex.
request_id = forms.IntegerField()
#etc.
def __init__(self, initial, *args, **kwargs):
object_data = {}
object_data['request_id'] = initial['request_id']
#etc.
super(AnywhereFlightCreationForm, self).__init__(initial=object_data, *args, **kwargs)
编辑: 到目前为止,我已经能够使用TripCreationForm的两个子类来完成这项工作,但两者都没有使用TripCreationForm。
提前致谢!
答案 0 :(得分:0)
向导需要将它们标识为单独的步骤。也许这会起作用?
wizard_forms = [
("form1", TripCreationForm),
("form2", TripCreationForm),
]