在聚合中使用模型方法

sdk*_*900 9 django model aggregate

我试图在django聚合查询中使用模型方法.我不确定它是否可能,我可能会以错误的方式行事.

这是我想要查询的模型.

class ClassNumbers(models.Model):
   """
   The class year level and number inline model for a booking
   """
   booking = models.ForeignKey('Booking')
   yearLevel = models.CharField(max_length=10, choices=YEAR_CHOICES, verbose_name='Year Level')
   numberOfStudents = models.IntegerField(verbose_name='Number of Students') 

class Booking(models.Model):
   # A shorter version of the model
   date = models.DateField()
   institution = models.ForeignKey(Institution)

   def getStudentTotal(self):
      # Total class numbers
      classes = ClassNumbers.objects.filter(booking=self.id)
      classTotal = 0
      if ( classes ):
          for c in classes:
              classTotal += c.numberOfStudents
      return classTotal

   def getHDSV(self):
      HDSVunits = {
                'Full-Day': 2.0,
                'Half-Day AM': 1.0,
                'Half-Day PM': 1.0,
                'Three-Quarter Day': 1.5,
                '1 Hour': 0.5,
                'Custom': 1.0,
                }
      numStudents = self.getStudentTotal()
      result = numStudents * HDSVunits[self.price.name]
      return result
Run Code Online (Sandbox Code Playgroud)

getHDSV方法返回应用程序所在内部使用的报告指标.我希望将指标汇总为日期之间的月份总计.

我不是aggregate/ annotate主人.到目前为止,我的尝试并未取得我所追求的结果.

最后,我Bookings在指定日期之间查询,然后循环结果,并通过getHDSV每次迭代调用方法将报告单位计入字典.当然,生成的字典没有按照我想要的方式排序.所以我现在转而寻求帮助.

鉴于生成度量标准的方式,我可以在查询中聚合数据时调用模型方法吗?或者我应该HDSVunits在创建时使用字典aggregate?或者,还有更好的方法?

谢谢.

Rud*_*ter 0

如果返回的数据getHDSV不是来自数据库,aggregate则将annotate无法用于收集其统计信息。