1
我正在嘗試爲旅行創建過程創建一個SessionWizardView。這次旅行可能有一條腿(單程)或兩條腿(往返)。每條腿都有類似的架構,所以我想在步驟0和步驟1中使用相同的表單,並且條件僅在飛行是往返時使用step1。django SessionWizard可以使用兩次相同的表單嗎?
我遇到的問題是我的「提交」按鈕一直反覆加載第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
在forms.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。
在此先感謝!
這不幸似乎不起作用,它直接跳轉到form2。 – anyeone