我有一个包含 5 个表单的 Django 1.6 表单向导。我希望每个表单都可以访问所有以前表单中的字段值。
我在 views.py 中定义了一个 get_context_data 方法,它似乎做了它应该做的事情。这是我的意见.py
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.contrib.formtools.wizard.views import SessionWizardView
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
import pdb
class CalcWizard(SessionWizardView):
# Override template_name
template_name = 'calc/forms.html'
# Define a __name__ property on the wizard.
# We do this because a number of Django decorators
# raise an AttributeError when you use them to
# decorate an instance, complaining they cant find __name__
@property
def __name__(self):
return self.__class__.__name__
def get_context_data(self, form, **kwargs):
context = super(CalcWizard, self).get_context_data(form=form, **kwargs)
if self.steps.current >= 0:
data_0 = self.get_cleaned_data_for_step('0') # zero indexed
context.update({'data_0':data_0})
if self.steps.current >= 1:
data_1 = self.get_cleaned_data_for_step('1')
context.update({'data_1':data_1})
if self.steps.current >= 2:
data_2 = self.get_cleaned_data_for_step('2')
context.update({'data_2':data_2})
return context
def done(self, form_list, **kwargs):
# This is not done yet
return render_to_response('calc/forms.html', {
'form_data': [form.cleaned_data for form in form_list],
})
但是,我不明白如何访问表单中的上下文数据。
这是我的 forms.py 的一部分:
class DeliveryForm(forms.Form):
costs = forms.DecimalField(\
max_digits=16, \
decimal_places=2, \
label=_(u'Materialkostnad (kr)'), \
localize=True, \
validators=[MinValueValidator(0)])
amount = forms.DecimalField(\
max_digits=16, \
decimal_places=2, \
label=_(u'Mängd/Antal (kvm)'), \
localize=True, \
validators=[MinValueValidator(0)])
CHOICES=[(0,'BLC inomhus'), (1,'BLC utomhus'), \
(2,'BLC externt inomhus'), (3,'BLC externt utomhus')]
blc_inventory = forms.ChoiceField(\
choices=CHOICES, \
widget=forms.RadioSelect(), \
label=_(u'Var vill du lagra ditt material?'))
...
...
...
...
def __init__(self, *args, **kwargs):
super(DeliveryForm, self).__init__(*args, **kwargs)
if kwargs ??? is not None:
form.costs=???
这是我的 urls.py 的一部分
urlpatterns = patterns('',
url(r'^admin/filebrowser/', include(site.urls)),
url(r'^grappelli/', include('grappelli.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^calc/$', CalcWizard.as_view([\
ConstructionForm,\
DeliveryForm,\
KitningForm,\
CarryinginForm,\
ResultForm]
)),
)
如何访问表单中的上下文数据?