簡體   English   中英

如何在 Django 模型字段中求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM