私はデータを渡すことを試みています(最終的にはダミー変数を渡すテストのための辞書)をあるフォームから別のフォームに渡しています。その多段階のフォーム。 これはrequest.sessionオブジェクトを使用しています。しかし、最初のフォームからPostの後に2番目のフォームに達すると、セッションデータはNoneになり、セッションキーを印刷すると、変更されたように見えます。私はデフォルトのDBベースのセッションを使用しています。 私の全体的な目的は、form1からform2にデータを渡すことです。それを行うための他の提案がある場合は、私もそれらを試してみてください。DJango 2つのフォーム間でセッションを維持します
参考ドキュメント - https://docs.djangoproject.com/en/dev/topics/http/sessions/ http://gregblogs.com/dealing-with-forms-a-beginners-look-into-django-forms-and-sessions/
Settings.py
INSTALLED_APPS = (
'django.contrib.sessions',
...
)
MIDDLEWARE_CLASSES = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
]
Views.py
def step1(request):
form = UploadPickFileForm(request.POST)
# Create form instance
print "Session{}".format(request.session._get_session_key())
if request.method == 'POST':
initial = {'text':request.session.get('text', None)}
form = UploadPickFileForm(request.POST, request.FILES, initial = initial)
if form.is_valid():
action = form.cleaned_data.get('action')
uploaded_file = form.cleaned_data.get('file')
extractor = get_upload_extractor_for_source(form.cleaned_data.get('source'))
print "Action{}".format(action)
if action == INGEST_ACTION:
uploaded_file = form.cleaned_data.get('file')
try:
ingestable_upload = extractor.get_ingestable_upload(uploaded_file)
context = {'ingestable_upload': ingestable_upload}
except ParseError as e:
return self.show_error(e)
request.session['text'] = form.cleaned_data.get('action')
tt = request.session.get('text', None)
request.session.modified = True # just to force session save
print "Session data{}".format(tt)
return HttpResponseRedirect(urlresolvers.reverse('step2'))
else:
form = UploadPickFileForm()
else:
print "form is INVALID {}".format(form.errors)
return render(request,'step1.html', {'form':form})
def step2(request):
print "Session{}".format(request.session._get_session_key())
form = MappedReleaseTitleForm(request.POST)
formset_class = formset_factory(MappedReleaseTitleForm, extra =0)
tt = request.session.get('text', None)
print "Session data{}".format(tt)
if request.method == 'POST':
formset = formset_class(data,initial=[{'title':'HHHH'}])
if formset.is_valid():
data = formset.cleaned_data
print "data is {}".format(data)
return render (request, 'step2.html', {'form':formset_class})
この回答は、どのように問題が解決されているかを詳しく説明することで改善できます。 –