Передача данных из постформы в представление FileResponde
Недавно я начал использовать Django и мне удалось создать два представления, одно для отправки формы, а другое для возврата FileResponse, по отдельности они работают нормально.
Теперь мне нужно интегрировать оба варианта, когда клиент отправляет форму, я хочу перенаправить его на другой вид, используя поля, отправленные в предыдущей форме. Как я могу это сделать?
Вот вид моей формы:
def submitForm(request):
if 'report' in request.POST:
date_start = request.POST.get('date_start')
date_end = request.POST.get('date_end')
state = request.POST.get('state')
return render(request, 'comissao.html')
Вот мое представление, которое создает файл pdf
def createPdf(request):
date_start = '20220301'
date_end = '20220331'
state = 'G00471'
body = "some html"
options = { 'quiet': '' }
pdfkit.from_string(body, options=options)
file = open('file.pdf', 'rb')
return FileResponse(file)
Как вы видите, мне нужна информация, переданная в первом представлении, для использования во втором представлении, я пробовал что-то вроде этого, но я думаю, что я ошибаюсь в концепции,
return reverse('pdf', kwargs={'state':state, 'date_start':date_start, 'date_end':date_end})
reverse() возвращает только URL, но я думаю, что вы скорее хотите сделать redirect() к этому представлению.
Для передачи параметров у вас есть несколько вариантов:
- GET параметры
- Сессия
- URL параметры
Давайте использовать параметры GET, которые я бы предложил:
from urllib.parse import urlencode
...
def submitForm(request):
...
response = redirect('pdf')
params = { state' : state, 'date_start: date_start, 'date_end': date_end}
response['Location'] += f'?{urlencode(params)}'
return response
Затем в представлении PDF необходимо разобрать параметры GET:
def createPdf(request):
date_start = request.GET.get("date_start")
...
Обратите внимание, что вам также может потребоваться преобразовать ваши даты в строку и обратно для запроса, что я здесь проигнорировал.