Вы можете использовать session
здесь. Например:
def studinfo(request):
form = StudentForm(request.POST or None, initial={'name':request.session.get('student_name', None)})
if request.method == "POST":
if form.is_valid():
form1 = form.save(commit=False)
name = form1.name
request.session['student_name'] = name
background=Student.objects.get(stud_name=name)
context={'profile':background ,}
return render(request, 'main/stud_info.html', context)
return render(request, 'main/main.html', context={'form':form})
Здесь следует упомянуть одну вещь: поскольку вы ничего не обновляете в базе данных, лучше использовать метод GET
вместо POST
. Потому что по определению методы GET являются идемпотентными.
Обновление
После тщательного изучения проблемы, я думаю, вы можете повторно использовать main.html
, чтобы показать результаты и информацию об ученике. Вот пример, основанный на запросе get:
def studinfo(request):
form = StudentForm()
name = request.GET.get('name', None)
background = None
if name:
background=Student.objects.get(stud_name=name)
context={'profile':background , 'form': form}
return render(request, 'main/main.html', context=context)
# main.html
<form method="GET" >
{{ form}}
<button class = "btn btn-primary" type="submit">OK</button>
</form>
{% if profile %}
{{ profile.name }}
{% endif %}
Альтернативное решение
Другим решением является отправка формы через контекст при рендеринге main/stud_info.html
.
def studinfo(request):
form = StudentForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
form1 = form.save(commit=False)
name = form1.name
background=Student.objects.get(stud_name=name)
context={'profile':background , 'form': StudentForm()} #<-- Updated here
return render(request, 'main/stud_info.html', context)
return render(request, 'main/main.html', context={'form':form})
И добавьте связанные с формой html файлы в main/stud_info.html