2017-01-10 8 views
0

私はデータを渡すことを試みています(最終的にはダミー変数を渡すテストのための辞書)をあるフォームから別のフォームに渡しています。その多段階のフォーム。 これは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}) 

答えて

0

は(https://django-formtools.readthedocs.io/en/latest/)良い選択-formtoolsはDjangoのかもしれませんか?特に、フォームを複数のWebページに分割するフォームウィザード。

これは、最初から書き込むことなく問題を解決するのに役立つかもしれません!

+0

この回答は、どのように問題が解決されているかを詳しく説明することで改善できます。 –

関連する問題