Django - приложение для викторины - проблема с представлениями и перенаправлением я полагаю
Я пытаюсь сделать приложение с помощью django, которое позволит мне учиться.
на данный момент я уже сделал это
models.py
from django.db import models
from django.contrib.auth.models import User
class Question(models.Model):
question_text = models.CharField(max_length=200, null=True)
answer_text = models.CharField(max_length=200, null=True)
date_posted = models.DateTimeField(auto_now_add = True)
def __str__(self):
return self.question_text
class Test(models.Model):
name = models.CharField(max_length=200)
questions = models.ManyToManyField(Question)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=None, null=True, blank=True)
date_posted = models.DateTimeField(auto_now_add = True)
urls.py
urlpatterns = [
path('', views.home, name='home'),
path('test/<str:pk>/', views.test),
]
urls.py
urlpatterns = [
path('', include('exam.urls')),
path('admin/', admin.site.urls),
]
views.py
def test(request, pk):
print("Am I getting here?")
test = Test.objects.get(id=pk)
questions = test.questions.all()
form = Answer()
context = {'questions':questions, 'form':form}
if request.method == 'POST':
instance = Question.objects.get(id=pk)
form = Answer(request.POST, instance=instance)
if form.is_valid():
print("form is valid")
if request.POST.get("answer").strip() == instance.answer_text:
return HttpResponse('<h1>aaa</h1>')
print("answer is correct")
# used strip() to remove whitespace before and after the text.
return redirect('home')
return render(request, 'exam/test.html', context)
forms.py
from django import forms
from django.forms import ModelForm
from exam.models import Question
class Answer(ModelForm):
class Meta:
model = Question
fields = ['answer_text']
answer = forms.CharField(label='Your answer', max_length=100)
html
{% for question in questions %}
<div class="question-container">
<p>{{question.question_text}}</p>
<form method="POST">
<td>{{ form.answer }}</td>
{% csrf_token %}
<input type="hidden" name="question_id" value="{{ question.id }}" />
<td>
<input type="submit" value="submit">
</td>
</form>
</div>
{% endfor %}
Я не реализовал никакой функции счетчика очков. Я хотел быть перенаправленным на главную страницу, если ответ правильный, чтобы увидеть, работает ли форма правильно, но это не так. Где я допустил ошибку?
Я добавил несколько операторов печати в views.py, чтобы увидеть, где код останавливается, и я вижу только "Am I getting here?" в консоли