我必须找到两个字段之和高于给定字段的参与者数量。以下型号:
class Examination(models.Model):
total_score = models.FloatField(_('Total score'), blank=False, null=False, default=60)
class ExamParticipation(models.Model):
examination = models.ForeignKey(Examination, blank=False, null=False, on_delete=models.CASCADE, related_name='examination_participations')
total_score = models.DecimalField(_('examination score'), max_digits=3, decimal_places=1, default=0)
additional_score = models.DecimalField(_('additional score'), max_digits=3, decimal_places=1, default=0)
因此,对于给定的考试,我必须计算有多少参与者,其中 total_score 和 additional_core 的总和大于或等于 total_score/2。这对于查询集是否可行,还是我必须遍历结果?
我尝试了以下查询:
def count_sufficient_participations(self):
qs = self.values('examination_participations').order_by('examination_participations').annotate(
ts=Sum(F('examination_participations__total_score') + F('examination_participations__additional_score'))
).annotate(cnt_suff=Count('examination_participations')).filter(ts__gte=30)
但似乎不起作用,我不知道如何用考试中的字段 total_score 替换 30。我想为我的模板设置像 Exam.cnt_suff 这样的东西。任何帮助将不胜感激。