假設我有一個步驟的輸入和下一步的另一個輸入(我正在使用SessionWizardView)。我需要驗證下一步輸入與上一步的輸入相同。如果輸入與previos步驟中的輸入不相同,那麼更新驗證器以顯示正確的錯誤會很好,因爲我在提交之前使用了執行django表單驗證器的ajax驗證。驗證基於上一步
我想在第二步輸入驗證程序中使用ThreadLocal.get_current_request()獲取會話並以某種方式進行比較。但我不認爲這是一個很好的解決方案:)任何建議?
假設我有一個步驟的輸入和下一步的另一個輸入(我正在使用SessionWizardView)。我需要驗證下一步輸入與上一步的輸入相同。如果輸入與previos步驟中的輸入不相同,那麼更新驗證器以顯示正確的錯誤會很好,因爲我在提交之前使用了執行django表單驗證器的ajax驗證。驗證基於上一步
我想在第二步輸入驗證程序中使用ThreadLocal.get_current_request()獲取會話並以某種方式進行比較。但我不認爲這是一個很好的解決方案:)任何建議?
我認爲應該這樣做:
class MyWizard(SessionWizardView):
def get_form_kwargs(self, step):
kwargs = {}
if step == 'second_step':
cleaned_data = self.get_cleaned_data_for_step('first_step')
kwargs.update({'first_input': cleaned_data['first_input'] })
return kwargs
那麼你彈出它在你的第二個形式
class SecondForm(forms.Form):
def __init__(self, *args, **kwargs):
self.first_input = kwargs.pop('first_input', None)
super(SecondForm, self).__init__(*args, **kwargs)
def clean(self):
super(SecondForm, self).clean()
if any(self.errors):
return
# compare self.first_input with self.cleaned_data['second_input']
return self.cleaned_data
太好了,謝謝! – Oink
Actualy我能夠通過'self.storage.get_step_data'從first_step獲取數據。方法'get_cleaned_data_for_step'返回None,因爲裏面的方法'get_form'返回的是類而不是實例。或者我錯過了什麼? – Oink
@Oink你說得對,storage.get_step_data對於簡單的情況是完美的(它需要驗證的原始數據)。我有點驚訝,你有一個get_cleaned_data_for_step問題。我無法幫助,因爲我沒有看到代碼。現在只需要使用get_step_data,如果你進入更復雜的嚮導過程,然後幫助你解決我的問題:) – mariodev
難道你們就不能只是把輸入從上一步驟中'context'和比較它在下一步之前提交下一步? – karthikr
你的意思是get_context_data()獲得上下文嗎?可能但是我怎樣才能比較下一步?主要想法 - 修改表單驗證器以某種方式顯示正確的錯誤? – Oink
在提交第1步時,您將獲得價值。我要說的是,將此作爲上下文變量添加到步驟2.這樣,如果值相同,則可以在提交步驟2時輕鬆進行比較 – karthikr