【发布时间】:2020-03-25 20:50:46
【问题描述】:
我有一个测验模型和一个视图,其中显示了页面上所有测验的列表。我想显示他们在每个测验旁边得到的分数。目前,我有一个分数模型,它链接到每个测验和参加测验的用户。我想做Score.objects.filter(user=request.user, quiz=quiz).get_percentage() 之类的事情来显示该测验的百分比。但是,这当然不适用于模板代码。
def learn(request): #Quiz Screen
context = {
'quizzes':Quiz.objects.all(),
'scores':Score.objects.filter(user=request.user),
}
return render(request, 'quiz_app/learn.html', context)
{% extends "quiz_app/base.html" %}
{% block content %}
<a href="{% url 'quiz-create' %}">New Quiz</a>
{% for quiz in quizzes %}
<a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
<article class="quiz-thumbnail-large">
<h2>{{ quiz.title }}</h2>
<h3>{{ quiz.question_amount }} Questions</h3>
<p>Score: {{ quiz.score.get_percentage }}%</p>
</article>
</a>
{% endfor %}
{% endblock content %}
class Quiz(models.Model):
title = models.CharField(max_length=100) #or TextField
#slug = models.SlugField(max_length=200, default=1) #url
video_link = models.CharField(max_length=100, default="https://www.youtube.com/watch?v=p60rN9JEapg")
question_amount = models.IntegerField()
author = models.ForeignKey(User, default=1, on_delete=models.CASCADE, related_name='quiz_author',)
date_created = models.DateTimeField(default=timezone.now)
class Meta:
verbose_name_plural = "Quizzes"
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('quiz-detail', kwargs={'pk': self.pk})
class Score(models.Model):
quiz = models.ForeignKey(Quiz, default=1, on_delete=models.CASCADE)
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
correct_answers = models.IntegerField()
incorrect_answers = models.IntegerField()
def __str__(self): #returns as a/b
score = str(self.correct_answers) + '/' + str(self.get_total_answers())
return score
def add_correct_answers(self, amount):
self.correct_answers = self.correct_answers + amount
self.save()
def add_incorrect_answers(self, amount):
self.incorrect_answers = self.incorrect_answers + amount
self.save()
def get_total_answers(self):
total = self.correct_answers + self.incorrect_answers
return total
def get_percentage(self):
percentage = round(self.correct_answers / self.get_total_answers() * 100)
return percentage
【问题讨论】:
-
能否请您发布示例预期输出
-
看起来您需要在上下文字典中添加一个 'quizscores':{quiz_id: score, ...} 项。您必须遍历测验并查找每个分数(或创建自定义查询集以返回每个 quiz_id 的分数)。这将允许您在使用当前行对 quiz_id 和 quizscores 字典的引用呈现每个测验行时访问分数。 (在模板中索引 dict 值在此处解决:stackoverflow.com/questions/19745091/…)
-
所以每个
quiz可以有多个scores,对吧?还请附上您的型号代码。 -
@SukumarRdjf 这将是所有测验标题的列表以及他们有多少问题,但我还希望它显示测验已经完成的百分比。
-
@PedramParsian 是的,到目前为止,每个用户每次测验只能获得一个分数。我已经添加了模型
标签: python django object django-templates django-views