Django reset a save variable to 0, 最好在home view

Django reset a save variable to 0, preferably at home view

我正在创建一个简单的测验(已完成 99%),只需要最后一件事的帮助——对 intermediate/advanced 程序员来说可能微不足道。我创建了一个保存变量来保存用户的当前分数。这是为了让用户从一个页面导航到另一个页面,并且仍然可以看到他们当前的分数。

当用户浏览最后一个模板视图时,它会给出最终分数和 link 以重定向到主页。这允许用户有机会“重新参加测验”。此时(主页)我需要帮助将保存的分数变量重置为 0。

请告诉我如何做到这一点,在此先感谢!

models.py

    class Scorer(models.Model):
        score = models.IntegerField(default=0)
        page = models.IntegerField()
        condition_number = models.IntegerField(default=0)

views.py

class IndexView(generic.ListView):
    template_name = 'quizzes/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """Return the first published question """
        return Question.objects.filter(id=1)


def vote(request, question_id, *args, **kwargs):
    model = Question
    template_name = 'quizzes/vote.html'
    question = get_object_or_404(Question, pk=question_id)

    
    ### To create user scoring system ###
    scorer, created = Scorer.objects.get_or_create(page=1)


    try:
        selected_choice = question.answer_set.get(pk=request.POST['answer'])



        ### To save user score ###
        if selected_choice in Answer.objects.filter(id=1):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=6):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=12):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=13):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=19):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=22):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=28):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=30):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=36):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=37):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=38):
            scorer.score +=10
            scorer.save()
        elif selected_choice in Answer.objects.filter(id=40):
            scorer.score +=10
            scorer.save()

我更新了主页视图 (IndexView),现在可以使用了。当用户到达问题 1 时,只需创建一个 IF 语句。然后分数消失并从 0 开始。为了清楚起见,请参见下文:

class IndexView(generic.ListView):
    template_name = 'quizzes/index.html'
    context_object_name = 'latest_question_list'

    
    
    def get_queryset(self):
        
        scorer, created = Scorer.objects.update_or_create(page=1)
        
        ### To reset scores to 0 ###
        if Question.objects.filter(id=1):
            scorer.score = (scorer.score - scorer.score)
            scorer.save()

        """Return the first published question """
        return Question.objects.filter(id=1)