2016-06-06 2 views
0

확인 페이지를 만들려고합니다. User은 한 페이지에 주문을 생성 할 수 있으며 create_order보기는 forms의 유효성을 검사하고 confirm_order이라고하는 다른 view에 대한 컨텍스트와 함께 요청을 보냅니다. 나는 올바르게 작동 하겠지만 한가지 문제가 있다고 생각합니다. 처음으로 confirm_orderforms의 데이터를 포함하는 requestcontext을 얻습니다.장고에서 작업하는 방법

> ValidationError at /create-job/ [u'ManagementForm data is missing or 
> has been tampered with'] 

너희들이 컨텍스트 두 번째 시간을 어떻게 보내는 지 알고 있나요 :이 페이지에서 확인에 User 클릭이의 confirm_view이 컨텍스트없이 호출 때 그래서 나는 오류를 받고 있어요? 여기

그 두 가지보기 위치 : 템플릿의 첫 번째보기를 렌더링 반환하는

def create_order(request): 
    LanguageLevelFormSet = formset_factory(LanguageLevelForm, extra=5, max_num=5) 
    language_level_formset = LanguageLevelFormSet(request.POST or None) 
    job_creation_form = JobCreationForm(request.POST or None, request.FILES or None) 

    context = {'job_creation_form': job_creation_form, 
       'formset': language_level_formset} 

    if request.method == 'POST': 
     if job_creation_form.is_valid() and language_level_formset.is_valid(): 
      cleaned_data_job_creation_form = job_creation_form.cleaned_data 
      cleaned_data_language_level_formset = language_level_formset.cleaned_data 

      context = { 
       'cleaned_data_job_creation_form': cleaned_data_job_creation_form, 
       "cleaned_data_language_level_formset": cleaned_data_language_level_formset, 
      } 
      mutable = request.POST._mutable # I'm adding parameter 'review' to be able to differ between two different posts in confirm_order view 
      request.POST._mutable = True 
      request.POST['review'] = True 
      request.POST._mutable = mutable 
      return confirm_order(request, context) 
     else: 
      return render(request, 'auth/jobs/create-job.html', context=context) 
    return render(request, 'auth/jobs/create-job.html', context=context) 


def confirm_order(request, context): 
    print context 
    cleaned_data_job_creation_form = context['cleaned_data_job_creation_form'] 
    cleaned_data_language_level_formset = context['cleaned_data_language_level_formset'] 
    print request.POST['review'] 
    if request.method == 'POST' and request.POST['review'] == True: 

     file = cleaned_data_job_creation_form['file'] 
     count = 5 #simplified multiple rows 
     jobs = [] 
     for language_level_form in [d for d in cleaned_data_language_level_formset if d]: 
      language = language_level_form['language'] 
      level = language_level_form['level'] 
      d = {} 
      d['language_from'] = cleaned_data_job_creation_form['language_from'].name 
      d['language_to'] = language 
      d['number_of_characters'] = count 
      d['price_per_sign'] = 1 
      d['estimated_price'] = count * d['price_per_sign'] 
      jobs.append(d) 

     table = CreatedOrdersTable(jobs) 
     context = {'table': table, 
        'cleaned_data_job_creation_form': cleaned_data_job_creation_form, 
        'cleaned_data_language_level_formset': cleaned_data_language_level_formset} 
     return render(request, 'auth/jobs/confirm-order.html', context=context) 
    else: 
     for language_level_form in [d for d in cleaned_data_language_level_formset if d]: 
      language = language_level_form['language'] 
      level = language_level_form['level'] 

      Job.objects.create(
        customer=request.user, 
        text_to_translate=cleaned_data_job_creation_form['text_to_translate'], 
        file=cleaned_data_job_creation_form['file'], 
        short_description=cleaned_data_job_creation_form['short_description'], 
        notes=cleaned_data_job_creation_form['notes'], 
        language_from=cleaned_data_job_creation_form['language_from'], 
        language_to=language, 
        level=level, 
      ) 
     return HttpResponseRedirect('/order-success') 

답변

0

. 따라서 요청은 confirm_order 뷰에서 끝나지 않습니다.

원하는 경우 방향을 바꾸어 ('confirm_order') 세션에 데이터를 추가 할 수 있습니다.

confirm_order보기에서 세션의 데이터를 팝업하고 계속 진행하십시오.

+0

감사합니다. 세션을 보내는 방법을 자세히 설명해 주시겠습니까? –

+0

create_order()에서 다음과 같이 할 수 있습니다 : request.session [ 'cleaned_data_job_creation_form'] = cleaned_data_job_creation_form. confirm_order()로 리디렉션하면 다음과 같은 형식으로 액세스 할 수 있습니다. request.session.pop ('cleaned_data_job_creation_form') – Alecsandru

+0

감사하지만 큰 문제가 있습니다. cleaned_data에는 모델 객체가 포함되어 있습니다.이 형식으로 보낼 수는 없으며 또한 직렬화 할 수도 없습니다. –

관련 문제