Django 将保存变量重置为 0,最好在主视图中
Posted
技术标签:
【中文标题】Django 将保存变量重置为 0,最好在主视图中【英文标题】:Django reset a save variable to 0, preferably at home view 【发布时间】:2021-02-01 15:51:33 【问题描述】:我正在创建一个简单的测验(已完成 99%),只需要最后一件事的帮助 - 对于中级/高级程序员来说可能微不足道。我创建了一个保存变量来保存用户的当前分数。这样用户就可以从一个页面导航到另一个页面,并且仍然可以看到他们当前的分数。
当用户浏览最后一个模板视图时,它会给出最终分数和重定向到主页的链接。这允许用户有机会“重新参加测验”。此时(主页)我需要帮助将保存的分数变量重置为 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()
【问题讨论】:
您想访问模板中任何位置的变量,但是当您点击主页视图时,如果我理解,该变量会重置为 0? 是的,这是正确的@BriseBalloches。我已经在我的模板中访问变量。当我点击主页视图时,只需将其重置为 0。到目前为止,分数还在不断增加。当有人试图重新参加测验时没有意义。 与首页匹配的视图是什么? 对不起,忘了包括那个。我现在已经这样做了。请参见上面的“IndexView”@BriseBalloches 在您的 Scorer 模型中,您是否有与 quizz 和 user 的外键?在您的get_queryset(self)
中,您只需检索它并将其设置为 0。
【参考方案1】:
我更新了主页视图 (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)
【讨论】:
以上是关于Django 将保存变量重置为 0,最好在主视图中的主要内容,如果未能解决你的问题,请参考以下文章