[英]Django how to compute the Percentage using annotate?
我想計算每個評分類別的總平均值,並使用 annotate 將其乘以給定的數字
這是我的 views.py
from django.db.models import F
gradepercategory = studentsEnrolledSubjectsGrade.objects.filter(grading_Period = period).filter(Subjects = subject).filter\
(Grading_Categories__in = cate.values_list('id')).values('Grading_Categories').annotate( average_grade = Avg * F('Grading_Categories__PercentageWeight') / 100)
這是我的models.py
class gradingCategories(models.Model):
CategoryName = models.CharField(max_length=500, null=True)
PercentageWeight = models.FloatField()
class studentsEnrolledSubjectsGrade(models.Model):
GradeLevel = models.ForeignKey(EducationLevel, related_name='grade', on_delete=models.CASCADE,
null=True, blank=True)
Subjects = models.ForeignKey(Subject, related_name='subject', on_delete=models.CASCADE, null=True)
Students_Enrollment_Records = models.ForeignKey(StudentsEnrolledSubject, related_name='student',
on_delete=models.CASCADE, null=True)
Grading_Categories = models.ForeignKey(gradingCategories, related_name='category', on_delete=models.CASCADE,
null=True, blank=True)
grading_Period = models.ForeignKey(gradingPeriod, related_name='period', on_delete=models.CASCADE,
null=True, blank=True)
_dates = models.CharField(max_length=255,null=True, blank=True)
Grade = models.FloatField(null=True, blank=True)
欲了解更多信息:
例如測驗(評分類別)的平均值是 80,它將乘以 15(百分比權重)
Total = 80(Grading_Categories) * 15(PercentageWeight) total=total / 100
結果必須是 12
您可以使用F 表達式執行此操作
從文檔:
Reporter.objects.all().update(stories_filed=F('stories_filed') + 1)
所以你的例子是這樣的:
studentsEnrolledSubjectsGrade.objects.all().annotate(grade_percent=(.8 * F('Grading_Categories')) * (.15 * F('PercentageWeight') / 100)
(作為旁注,使用 UpperCaseCamelCase 作為類名,並使用 snake_case 作為字段名是 django/python 標准。因此 StudentsEnrolledSubjectsGrade 和 grading_categories)查看Pep-8了解詳細信息)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.