测验应用-提交问题并转到下一个问题(Django框架)

时间:2019-04-12 21:00:54

标签: python django django-models django-templates django-views

在我的应用程序中提交问题时遇到一个问题,请转到下一个问题。目前我所拥有的是:

from django.shortcuts import render, get_object_or_404, HttpResponse

from . models import Certificacao, Certificado
from questoes . models import Questao
from multescolha . models import Alternativa
from . forms import QuestaoForm
from django.views.generic import ListView, FormView

class HomeView(ListView):
    model = Certificacao
    template_name = 'certificacoes/index.html'

def certificados(request, slug):
    certificacao = get_object_or_404(Certificacao, slug=slug)
    certificados = Certificado.objects.filter(certificacao__slug=slug)
    context = {
        'certificacao': certificacao,
        'certificados': certificados,
    }
    return render(request, 'certificacoes/certificados.html', context)

class Perguntas(FormView):

    form_class = QuestaoForm
    template_name = 'certificacoes/pergunta.html'
    template_name_result = 'certificacoes/resultado.html'

    def get_form(self, *args, **kwargs):

        slug_certificado = self.kwargs['slug_certificado'] # url capturada via kwargs
        slug_certificacao = self.kwargs['slug_certificacao']  # url capturada via kwargs
        self.cache_questoes = Questao.objects.filter(situacao__certificado__slug=slug_certificado,
                                                    situacao__certificado__certificacao__slug=slug_certificacao).values_list('id', flat=True)
        if len(self.cache_questoes) > 0:
            self.questao = Questao.objects.get_subclass(id=self.cache_questoes[0])

        if self.form_class is None:
            form_class = self.get_form_class()
        else:
            form_class = self.form_class

        return form_class(**self.get_form_kwargs())

    def get_form_kwargs(self):
        kwargs = super(Perguntas, self).get_form_kwargs()
        return dict(kwargs, questao=self.questao)

    def form_valid(self, form):
        hipotese = form.cleaned_data['respostas']
        correto = self.questao.checar_correta(hipotese)

        if correto is True:
            return render(self.request, self.template_name_result, {'correto': correto,
                                                                    'escolhida': self.questao.alternativa_escolhida(hipotese),
                                                                    'fundamento': self.questao.alternativa_fundamento(hipotese),
                                                                    'pergunta': self.questao})
        else:
            return render(self.request, self.template_name_result, {'correto': correto,
                                                                    'escolhida': self.questao.alternativa_escolhida(hipotese),
                                                                    'fundamento': self.questao.alternativa_fundamento(hipotese),
                                                                    'pergunta': self.questao})

    def get_context_data(self, **kwargs):
        context = super(Perguntas, self).get_context_data(**kwargs)
        context['questao'] = self.questao
        return context

该行在此行的哪个位置返回匹配项问题的ID(可以是1个或多个):

  

self.cache_questoes =   Questao.objects.filter(situacao__certificado__slug = slug_certificado,                                                       situacao__certificado__certificacao__slug = slug_certificacao).values_list('id',flat = True)

在这一行中,我将在模板中显示与在过滤器中找到的第一个位置的ID相关的问题:

  

self.questao = Questao.objects.get_subclass(id = self.cache_questoes [0])

如您所见,如果我将位置设为0或1,我通常会看到问题。我希望它自动使我回到第一个位置,显示在模板中,并在提交第一个问题时将其发送给他,直到他无所事事为止。

0 个答案:

没有答案