2016-01-23 79 views
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。

在此先感謝!

回答

0

嚮導需要將它們識別爲單獨的步驟。也許這會工作?

wizard_forms = [ 
     ("form1", TripCreationForm), 
     ("form2", TripCreationForm), 
] 
+0

這不幸似乎不起作用,它直接跳轉到form2。 – anyeone

相關問題