Я делаю проект, связанный с онлайн-опросами, и застрял в тот момент, когда хочу передать данные из одного представления в другое. Моя цель - получить имя опроса от пользователя в форме в одном представлении и передать его в другое представление после отправки формы.
Я сделал 2 просмотра:
- add () - который имеет первую форму с именем для теста и перенаправляет на add_questions с именем теста
- add_questions () - фиксирует название отправленной викторины и отображает другую форму для вопросов
views.py
@login_required
def add(request):
if request.method == 'POST':
QuizForm = QuizNameForm(request.POST)
if QuizForm.is_valid():
# create a quiz
new_quiz = QuizForm.save(commit=False)
new_quiz.owner = request.user
new_quiz.save()
request.session['quiz_id'] = new_quiz.id
print("Quiz saved, now I'm redirecting to add_questions")
return redirect(add_questions)
#return HttpResponseRedirect('add_questions') --- didn't work
#return render(request, 'quiz/add_questions.html', {}) --- didn't work
else:
QuizForm = QuizNameForm()
return render(request, 'quiz/add.html', {'quizForm': QuizForm})
@login_required
def add_questions(request):
print("Add questions here! I've captured a quiz named: {}".format(quiz.name))
quiz = DB_questions.objects.get(id=request.session['quiz_id'])
if request.method == 'POST':
print("ok, post method - cool")
#create a question/answer forms
else:
print("Got into else in add_questions view")
Question_form = QuestionForm()
return render(request, 'quiz/add_questions.html', {'quiz_name': quiz.name, 'question_form': Question_form })
Мой шаблон для добавления названия викторины - templates / add.html
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<!-- Get name of the quiz-->
<form action="{% url 'add' %}" method="post">
{% csrf_token %}
{{ quizForm.name }}
<input class="btn btn-success w-100" type="submit" value="Proceed">
</form>
</div>
<div class="col-md-4"></div>
</div>
</div>
Шаблон для отображения формы имени и вопроса - templates / add_question.html
<div class="row">
<div class="col-md-5"></div>
<h2 class="select_title"> Quiz: {{ quiz_name }}</h2>
<div class="col-md-5"></div>
</div>
<form action="{% url 'add_questions' %}" method="post">
{% csrf_token %}
{{ question_form.content }}
</form>
И, наконец, urls.py
urlpatterns = [
# ...
url(r'^add', views.add, name='add'),
url(r'^add_questions', views.add_questions, name='add_questions'),
]
Основная проблема заключается в том, что после отправки названия теста система добавляет тест в базу данных, но не перенаправляет меня на «add_questions». Он все еще остается в режиме добавления.
Также я не уверен, правильно ли я это реализовал. Я нашел много разных способов, как я мог это сделать, но ни один из них не сработал для меня. (Решения, такие как HttpResponseRedirect (), redirect (), render () и т. Д.)
Подводя итог:
1) Как лучше всего в этом случае передавать данные между представлениями после отправки их в форму?
2) Как мне перенаправить на другой вид, чтобы он отображал правильный шаблон?