1

I have tried to figure this out by looking at the same questions asked by others but I could not figure it out by looking at their questions. Is it something wrong with the vote views of is it something else.enter image description here

The problem is everytime I hit the vote/submit button I get this error can someonne explain the reason for this.

views.py

    class QuizView(DetailView):
    model = Question
    template_name = 'Quizzes/quiz.html'
    
 
   
    
    
class ResultsView(generic.DetailView):
    model = Question
    template_name = 'JSUMA/results.html'
    

def vote(request, question_id):
    question = get_object_or_404(Question, question_id)
    try:
        selected_answer = question.answer_set.get(pk=request.POST['answer'])
    except (KeyError,Answer.DoesNotExist):

        return render(request, 'Quizzes/quiz.html', {'question':question,
        'error_message' : "You didn't select an answer.",})
    else:
        selected_answer.ans += 1
        selected_answer.save()
            
        return HttpResponseRedirect(reverse('JSUMA:', args=(question.id)))

models.py

class User(models.Model):
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)
    #password = models.CharField(max_length=25)
    email = models.EmailField(max_length=100)

class Quiz(models.Model):
    name = models.CharField(max_length=200,primary_key=True)
    NOQ = models.IntegerField(default=1)
    
   
    

    class Meta:
        verbose_name = "Quiz"
        verbose_name_plural = "Quizzes"
    
    def __str__(self):
        return self.name
    #number Of Questions
class Major(models.Model):  
    major = models.CharField(max_length=200)
    ans = models.IntegerField(default=0)
    answer = models.ManyToManyField('Answer')
    def __str__(self):
        return self.major

class Question(models.Model):
    question_text = models.CharField(max_length=400)
    quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.question_text


class Answer(models.Model):
    question = models.ForeignKey('Question', on_delete=models.CASCADE, null=True)
    answer_text = models.CharField(max_length=200)


    def __str__(self):
         return self.answer_text

quiz.html

<h1><h1>{{ question.question_text }}</h1></h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'JSUMA:vote' question.id %}" method="post">
    {% csrf_token %}
    {% for answer in question.answer_set.all %}
        <input type="radio" name="answer" id="answer{{ forloop.counter }}" value="{{ answer.id }}" />
        <label for="answer{{ forloop.counter }}">{{answer.answer_text }}</label><br />
    {% endfor %}
    <input type="submit" value="Vote" />
    </form>

1 Answer 1

1

If you use positional parameters in a get_object_or_404, this is for a Q object. Otherwise you should use named parameters:

def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    # …
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.