如何更新数据库Django中的字段?

时间:2019-04-03 11:49:43

标签: django

我需要为我的申请更新学生的总成绩 但问题是我无法更新此值。

型号:

<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'

我可以获得满分,但是我无法更新模型中的字段。

2 个答案:

答案 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中执行此操作,不确定是否推荐这样做。