0
我有一個包含5個窗體的Django 1.6窗體嚮導。我希望每個表單都可以訪問以前所有表單中的字段值。Django窗體嚮導:訪問窗體中的上下文
我已經在views.py中定義了一個get_context_data方法,它似乎做了它應該做的。這是我的views.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的一部分:我的urls.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=???
下面是部分
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]
)),
)
我如何訪問我的形式方面的數據?
謝謝您的回覆。我已更新我的帖子以更具體。 – 2014-09-11 09:24:16
哪裏,更確切地說,我應該添加實例,form = DeliveryForm(ctx = context),在我看來? – 2014-09-11 09:36:24
抱歉,延遲。由於您使用的是嚮導,因此您可以使用嚮導中的get_form_kwargs將正確的上下文傳遞給您的表單。 [見文檔](https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.get_form_kwargs)只需檢查步驟正確的值傳遞給表單。 – 2014-09-15 10:19:33