0
확인 페이지를 만들려고합니다. User
은 한 페이지에 주문을 생성 할 수 있으며 create_order
보기는 forms
의 유효성을 검사하고 confirm_order
이라고하는 다른 view
에 대한 컨텍스트와 함께 요청을 보냅니다. 나는 올바르게 작동 하겠지만 한가지 문제가 있다고 생각합니다. 처음으로 confirm_order
은 forms
의 데이터를 포함하는 request
및 context
을 얻습니다.장고에서 작업하는 방법
> 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')
감사합니다. 세션을 보내는 방법을 자세히 설명해 주시겠습니까? –
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
감사하지만 큰 문제가 있습니다. cleaned_data에는 모델 객체가 포함되어 있습니다.이 형식으로 보낼 수는 없으며 또한 직렬화 할 수도 없습니다. –