Как сохранить ввод формы с одной и той же функцией на 2 разных страницах - PullRequest
0 голосов
/ 04 апреля 2020

Ребята, я новичок в django и хочу узнать, как сохранить одно и то же поле ввода на 2

разных страницах.

В forms.py:

class StudentForm(forms.ModelForm):
        name = forms.CharField(max_length=150)

        class Meta:
            model = Student
            fields = ['name',]

В main.html У меня есть:

<form method="POST" >
              {% csrf_token %}
              {{ form}}
              <button class = "btn btn-primary" type="submit">OK</button> 

</form>

В views.py

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 ,}

            return render(request, 'main/stud_info.html', context)

    return render(request, 'main/main.html', context={'form':form})

после отправляя форму, она направляется в stud_info.html, где результаты отображаются на основе входного значения из формы в main.html.

У меня вопрос, как я могу сохранить ввод формы на странице stud_info.html с той же функцией, что и на main.html, чтобы мне не приходилось возвращаться на страницу main.html для поиска нового значения?

До сих пор я пытался просто скопировать main.html форму в stud_info.html, так как она отображает только OK butoon и ничего.

Буду признателен за любую помощь и руководство в поиске решения.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Вы можете использовать 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

1 голос
/ 04 апреля 2020

в студента / основной. html, где вы хотите. {% include 'student/snippets/form.html' with form=form %}

и в папке Student / Snippets создайте form.html с вашей формой.

<form method="POST" >
{% csrf_token %}
{{ form}}
<button class = "btn btn-primary" type="submit">OK</button> 
</form>
1 голос
/ 04 апреля 2020

1- с использованием localalstorage:

после нажатия кнопки OK сохраните данные формы в localalstorage с помощью этой функции javascript:

localStorage.setItem('key', 'value')

и на странице stud_info получите сохраненные данные из localalstorage с помощью:

localStorage.getItem('key')

2- с использованием базы данных:

, если вы сохраните данные формы в базе данных после нажатия кнопки OK

эти данные лучше получить из базы данных на stud_info странице

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...