Murilo de Jesus
Murilo de Jesus

Reputation: 123

Randomizing again in Django

When I generate a quiz in django, the question value before if request.method == 'POST': is one and then changed. Follow the screenshots.

Questão E200501

Questão E200503 views.py

    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

Answers (1)

Ralf
Ralf

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

Related Questions