如何在 Django 中将多列值的总和定义为一列 models.py

How to define the sum of multiple columns values into one column in Django models.py

我有一个 django models.py 如下:

from django.db import models 


class StudentList(models.Model):
    name=models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Marks_of_each_Student(models.Model):
    student_name=models.ForeignKey(StudentList,on_delete=models.CASCADE)
    s1=models.IntegerField()
    s2=models.IntegerField()
    s3=models.IntegerField()
    Total=models.IntegerField(default=0,editable=False)
    
    def calculate_total(self):
        return self.s1+self.s2+self.s3

    def save(self):
        self.Total=self.calculate_total()

我想要一个列名称 Total,当通过 shell 通过 ORM 命令输入时,其中包含 s1+s2+s3 的值。我尝试了以下但没有成功。

from main_page.models import StudentList,Marks_of_each_Student
>>> x=StudentList(name="XYZ NAME")
>>> x.save()
>>> x1=Marks_of_each_Student(student_name=x,s1=90,s2=90,s3=90)
>>> x1.save()
>>> x1
<Marks_of_each_Student: Marks_of_each_Student object (1)>
>>> x1.Total
0

所有其他列都具有正确的值,但此 Total 没有给出正确的结果。

我如何继续确保更改反映在 Total 列中,而且我没有在 MySQL table 中为 Marks_of_each_Student 保存这些数据.

谁能帮帮我??

from main_page.models import StudentList, Marks_of_each_Student

#If you want to create a new object and save it to studentlist
>>> b = StudentList(name='Beatles Blog')
>>> b.save()

# Retrieve a object by name so you can save it to marks of each student
>>> instance = StudentList.objects.get(name="Beatles Blog")
>>> instance
>>> Beatles Blog

# Create a new object to marks of each student:
>>> obj = Marks_of_each_Student(student_name=instance, s1=90, s2=90, s3=90)
# calculate the total
>>> obj.Total = obj.s1 + obj.s2 + obj.s3
# Save the object
>>> obj.save()

>>>obj.Total
>>>270

删除:

def calculate_total(self):
        return self.s1+self.s2+self.s3

def save(self):
    self.Total=self.calculate_total()

您需要确保在更新后调用父 save() 函数 self.Total:

    def save(self, *args, **kwargs):
        self.Total=self.calculate_total()
        super().save(*args, **kwargs)