[英]how to sum in django model fields
我这里有两个模型,一个包含主题信息,另一个包含课程信息,我想总结本课程的学分(总)数,以显示在模板中。 我试过但没有用。 太感谢了
class Course(models.Model):
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)
def tota_credit(self):
total = 0
for cred in self.subject_set.all():
total += cred.credit
return total # doesn't work :(
def __str__(self):
return self.name
另一个模型
class Subject(models.Model):
name = models.CharField(max_length=50)
code = models.PositiveIntegerField(unique=True)
credit = models.IntegerField(blank=True)
def __str__(self):
return self.name
视图.py
class Course_detail(generic.DetailView):
model = Course
template_name = 'course_detail.html'
context_object_name = 'queryset'
def get_context_data(self, **kwargs):
self.profile = Student.objects.all()
context = super().get_context_data(**kwargs)
context['profile'] = self.profile
return context
您不需要自己执行这些计算。 你可以.annotate(…)
[Django-doc]查询集:
from django.db.models import Sum
class Course_detail(generic.DetailView):
model = Course
template_name = 'course_detail.html'
queryset = Course.objects.annotate(
total_credit=Sum('subject__credit')
)
context_object_name = 'queryset'
# …
然后你可以用:
{{ queryset }}: {{ queryset.total_credit }}
from django.db.models import Sum ... def tota_credit(self): return self.subject_set.aggregate(Sum('credit'))['credit_sum']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.