優於從不遲到......我最近碰到這種情況下我自己,不得不重寫表單(第二步)init方法,並從WizardView的形式傳遞一個最初的關鍵字。從那裏我可以有條件地設置表單域的選擇。
我自己implementation-
views.py
class QuoteWizard(SessionWizardView):
form_list = [QQFormProductLine, QQProduct, QQProductFluidProperties]
...
def get_form_initial(self, step):
#pass variables to forms from here
initial = self.initial_dict.get(step, {})
if int(step) > 0:
self.temperature_units, self.measurement_format = self.get_measurement_units()
initial.update({'measurement_format': self.measurement_format})
return initial
forms.py
class QQProduct(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(QQProduct, self).__init__(*args, **kwargs)
units = None
if 'initial'in kwargs:
initial = kwargs.pop('initial')
if 'measurement_format' in initial:
units = initial.pop('measurement_format')
flow_choices = []
if units == 'imperial':
flow_units = qq_models.FlowRateUnits()
flow_units = flow_units.imperial()
elif units == 'metric':
flow_units = qq_models.FlowRateUnits()
flow_units = flow_units.metric()
for i in flow_units:
flow_choices.append((i, qq_models.FlowRateUnits.get(i)))
if len(flow_choices) > 0:
self.fields['flow_rate_format'].widget.choices = flow_choices
總之,get_form_initial是傳遞初始關鍵字後的形式的步驟的方法WizardView 。在我的self.get_measurement_units()方法,我請self.get_cleaned_data_for_step(「0」),並根據用戶輸入在第一步驟中,改變在第二步驟中的形式顯示在一個choicefield的選擇。
是的,我已經嘗試過了。選項以表格形式顯示,但驗證失敗,說明選定的值不是一個有效的選擇。 –
哦。抱歉。我沒有測試過這個。我的錯。現在看起來就像工作例子。當字段填充數據時更改條件。 –