我需要为我的申请更新学生的总成绩 但问题是我无法更新此值。
型号:
<div class="table">
<div class="table-scroll">
<table class="table-main">
<thead>
<tr>
<th class="fix-col">Name</th>
<th>Designation</th>
<th>Experience</th>
<th>Technology</th>
<th>Company</th>
<th>Location</th>
<th>Contact No.</th>
<th>Address</th>
</tr>
</thead>
<tbody>
<tr>
<td class="fix-col">Bob</td>
<td>Front End Developer</td>
<td>5 yrs</td>
<td>HTML,CSS</td>
<td>Google</td>
<td>California</td>
<td>9876543210</td>
<td>Google Office</td>
</tr>
<tr>
<td class="fix-col">Bob</td>
<td>Front End Developer</td>
<td>5 yrs</td>
<td>HTML,CSS</td>
<td>Google</td>
<td>California</td>
<td>9876543210</td>
<td>Google Office</td>
</tr>
<tr>
<td class="fix-col">Bob</td>
<td>Front End Developer</td>
<td>5 yrs</td>
<td>HTML,CSS</td>
<td>Google</td>
<td>California</td>
<td>9876543210</td>
<td>Google Office</td>
</tr>
<tr>
<td class="fix-col">Bob</td>
<td>Front End Developer</td>
<td>5 yrs</td>
<td>HTML,CSS</td>
<td>Google</td>
<td>California</td>
<td>9876543210</td>
<td>Google Office</td>
</tr>
<tr>
<td class="fix-col">Bob</td>
<td>Front End Developer</td>
<td>5 yrs</td>
<td>HTML,CSS</td>
<td>Google</td>
<td>California</td>
<td>9876543210</td>
<td>Google Office</td>
</tr>
</tbody>
</table>
</div>
</div>
糟糕:tota_score的默认值为0
观看次数:
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
total_score = models.FloatField(default=0)
def __str__(self):
return self.user.username
class Meta:
verbose_name = 'Estudantes'
我可以获得满分,但是我无法更新模型中的字段。
答案 0 :(得分:2)
这里有些错误。
首先,您需要仅针对学生而非所有人的测验计算总成绩:
student = self.request.user.student
total_score = TakenQuiz.objects.filter(student=student).aggregate(Sum('score'))
现在,您需要使用该值更新学生的记录:
student.total_score = total_score['score__sum']
student.save()
最后,对于ListView,您需要将其放置在比get_context_data
更好的位置。那根本不是正确的地方。学生提交当前测验的分数时,可能需要触发此操作。
答案 1 :(得分:1)
在您的total_score = TakenQuiz.objects.aggregate(Sum('score'))
上,您没有选择任何数据。首先使用get对象,然后对其进行更新。
另外,您正在ListView中执行此操作,不确定是否推荐这样做。