Django, Python: не удается распаковать не итерируемый объект int

#python #django

#python #django

Вопрос:

Я попытался выяснить это, посмотрев на те же вопросы, которые задавали другие, но я не смог понять это, посмотрев на их вопросы. Что-то не так с представлениями о голосовании, это что-то еще.введите описание изображения здесь

Проблема в том, что каждый раз, когда я нажимаю кнопку голосования / отправки, я получаю эту ошибку, может кто-нибудь объяснить причину этого.

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:

Если вы используете позиционные параметры в a get_object_or_404 , это для Q объекта. В противном случае вам следует использовать именованные параметры:

 def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    # …