python - 如何在 django 模型/视图中计算总和
问题描述
我正在尝试为学生制作结果应用程序,有两种模型,一种用于学科,一种用于课程,每门课程都有不止一个具有学科学分的学科,所以我想总结所有学科学分取决于课程,现在我' m 获得单门课程的总科目学分,但是否可以拥有所有课程的科目总学分?因为他/她可以有不止一门课程。例如,一门课程的科目总学分 = 12 另一个学分 = 8 .......所以总学分 = 20 学分 请看图片以及第二个图像模型设计的更好方法
模型.py
class Subject(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=50)
code = models.PositiveIntegerField(unique=True)
credit = models.IntegerField(blank=True)
files = models.FileField(upload_to='course/materials/', blank=True)
status = models.CharField(max_length=15, choices=Subject_Status, blank=True)
def __str__(self):
return self.name
class Meta:
db_table = ''
managed = True
verbose_name = 'Subject'
verbose_name_plural = 'Subjects'
class Course(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=200, unique=True)
prefix = models.CharField(max_length=20)
code = models.CharField(max_length=20)
subject = models.ManyToManyField('Subject', related_name='subject_list', blank=True)
faield = models.ManyToManyField(Subject,related_name='failed_subject_status', blank=True)
passed = models.ManyToManyField(Subject,related_name='passed_subject_status', blank=True)
nerver = models.ManyToManyField(Subject,related_name='never_subject_status', blank=True)
current = models.ManyToManyField(Subject,related_name='curent_subject_status', blank=True)
program = models.ForeignKey('Program', related_name='program_course', on_delete=models.CASCADE,
blank=True, null=True)
视图.py
class Program_structure(generic.View):
def get(self, *args, **kwargs):
profile = Student.objects.all()
program_structure = Course.objects.filter(user=self.request.user)
credit =
Course.objects.filter(user=self.request.user).annotate(total_credit=Sum('subject__credit'))
context = {
'test':program_structure,
'credit':credit, #this is giving single course total
'profile':profile,
}
return render(self.request, 'test.html', context)
解决方案
您可以使用聚合来代替注释。
credit = Course.objects.filter(user=self.request.user).aggregate(total_credit=Sum('subject__credit'))
推荐阅读
- javascript - Inserting variables into regular expressions
- android - 如何从片段中隐藏软键盘
- wordpress - 从中获取 wpBakery 在自定义字段中返回的短代码值
- html5-video - iframe 不显示 youtube
- android - 尽管没有 INNER JOIN 的查询正在工作,但 INNER JOIN 查询返回 null
- yaml - 面临 gke 中文件存储持久卷的问题
- c++ - 从垫子到矢量
反之亦然,不会损坏图像 - python - 从多维 NumPy 数组中保存随机值
- spring-boot - 如何将 java/weblogic/ANT 应用程序转换为 spring boot/maven 应用程序?
- javascript - Javascript,计算从 1970-01-01 到今天的年月日