请推荐一下如何获取向导第一步中收到的数据,并以第二步的形式使用它:
表单.py
# First step form
class W1_ParamForm(forms.Form):
cities = forms.ModelChoiceField( label = 'City',
queryset=City.objects.all().order_by('name') )
# Second step form
class W1_SelectForm(forms.Form):
oEstates = MyModelMultipleChoiceField(
queryset = RealEstate.objects.
filter(city_id__exact = ...).
order_by('priceM'),
widget = forms.CheckboxSelectMultiple,
required = False)
此处... - 参数,包含城市ID,在第一种形式W1_ParamForm中选择。问题 - 如何以第二种形式获得它!
View .py
class W1_Estim(SessionWizardView):
template_name = "w1_estim.html"
def done(self, form_list, **kwargs):
form_data = [form.cleaned_data for form in form_list]
return render_to_response('w1_done.html', {'form_data': form_data})
url.py
urlpatterns = [
...
# Wizard start
url(r'^doestim$', W1_Estim.as_view([W1_ParamForm,W1_SelectForm]), name='doestim'),
...
非常感谢!
最佳答案
我明白了!为了接收上一步的数据,必须
A) 为 View 类 W1_Estim 实现 get_form_initial(self, step)
def get_form_initial(self, step):
if step == '1':
# on SECOND step get data of first step
step0data = self.storage.get_step_data('0')
if step0data:
cities = step0data.get('cities', '')
return self.initial_dict.get(step, {'cities': cities})
return self.initial_dict.get(step, {})
B) 实现表单类 W1_SelectForm 的构造函数
def __init__(self, *args, **kwargs):
c = kwargs['initial']['cities']
self.oEstates = ModelMultipleChoiceField(
queryset = RealEstate.objects.
filter(city_id = c).
order_by('priceM'),
widget = forms.CheckboxSelectMultiple,
required = False)
# NEED TO INCLUDE field oEstates into "declared_fields"!!!
self.declared_fields['oEstates']=self.oEstates
# superclass constructor ought to be called only AFTER
# including new field of class into "declared_fields" !!!
super(W1_SelectForm, self).__init__(*args, **kwargs)
就这些了!
关于python - 如何获取 django FormWizard 中上一步的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082403/