Django - приложение для викторины - проблема с формами, я полагаю

Я пытаюсь сделать приложение с помощью django, которое позволит мне учиться.

на данный момент я уже сделал это

models.py

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),
]

views.py

def test(request, pk):
    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():
            if request.POST.get("answer").strip() == instance.answer:
                return redirect('home')

    return render(request, 'exam/test.html', context)

forms.py

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

Я не реализовал никакой функции счетчика очков. Я хотел быть перенаправленным на главную страницу, если ответ правильный, чтобы увидеть, работает ли форма правильно, но это не так. Где я допустил ошибку?

Я считаю, что ошибка здесь:

if request.POST.get("answer").strip() == instance.answer:

Который должен быть:

if request.POST.get("answer").strip() == instance.answer_text:

Ваш instance является объектом Question, с полем answer_text, а не answer.

В вашем корневом urls.py также есть путь с 'name', и я не думаю, что он вам там нужен.

# change
    path('', include('exam.urls'), name="home"),
# to this:
    path('', include('exam.urls')),

Имя уже есть в вашем exam.urls.py.

Вернуться на верх