Я пытаюсь использовать метод модели в агрегированном запросе 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
Метод getHDSV
возвращает метрику отчетности, используемую внутри, где живет приложение. Я хочу объединить показатель в итоговое значение за месяц между периодами дат.
Я не aggregate
/ annotate
мастер. Мои попытки пока не дали результатов, к которым я стремлюсь.
В конечном итоге я запросил Bookings
между указанными датами, а затем перебрал результаты и перевел отчетную единицу в словарь, вызывая метод getHDSV
каждую итерацию. Конечно, полученный словарь отсортирован не так, как мне бы хотелось.
Поэтому я сейчас обращаюсь за помощью.
Учитывая способ генерации метрики, можно ли вызвать метод модели при агрегировании данных в запросе? Или я должен использовать словарь HDSVunits
при создании aggregate
? Или есть лучший способ?
Спасибо.