Reputation: 123
When I generate a quiz in django, the question value before if request.method == 'POST': is one and then changed. Follow the screenshots.
questao = Questao.objects.annotate(resp_count=models.Count(models.Case(models.When(resposta__usuario=request.user, then=1),output_field=models.IntegerField()))).filter(resp_count=0,tipoQuestao=1).order_by("?").first()
print (questao)
if request.method == 'POST':
print (questao)
respostaform = RespostaForm(request.POST or None)
if respostaform.is_valid():
resp = respostaform.save(commit=False)
resp.idQuestao = questao
resp.save()
return HttpResponseRedirect(request.path_info)
Upvotes: 1
Views: 50
Reputation: 16505
Your view should look something like this, where you only fetch a random question when the request IS NOT POST:
if request.method == 'POST':
respostaform = RespostaForm(request.POST or None)
if respostaform.is_valid():
resp = respostaform.save()
return redirect(...)
else:
questao = Questao.objects\
.annotate(
resp_count=models.Count(
models.Case(
models.When(resposta__usuario=request.user, then=1),
output_field=models.IntegerField())))\
.filter(resp_count=0,tipoQuestao=1)\
.order_by("?")\
.first()
print(questao)
return render(request, 'some template', {'questao': questao})
Your RespostaForm
should include a field named idQuestao
(You did not show the code of the form, but I assume it is a ModelForm
).
Does that help?
Upvotes: 1