如何在 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)
我有一个 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)