#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)
# …