gpt4 book ai didi

django - 在汇总中使用模型方法

转载 作者:行者123 更新时间:2023-12-04 04:35:56 25 4
gpt4 key购买 nike

我正在尝试在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词典?或者,还有更好的方法?

谢谢。

最佳答案

您的设置非常困难,在HDSVunits模型上放置Price映射可能会更容易,以使其更易于在查询中访问。

我能想到的最好的是这样的:

Booking.objects.aggregate(
hdsv=(
Sum('classnumbers__numberofstudents') *
Case(
When(price__name='Full-Day', then=2.0),
When(price__name='Half-Day AM', then=1.0),
When(price__name='Full-Day PM', then=1.0),
When(price__name='Three-Quarter Day', then=1.5),
When(price__name='1 Hour', then=0.5),
When(price__name='Custom', then=1.0),
output_field=FloatField(),
)
)
)

如果将HDSV值存储为 Price模型上的字段,则可以简单地执行以下操作:
Booking.objects.aggregate(
hdsv=Sum('classnumbers__numberofstudents') * F('price__hdsv'))

附带说明一下,您应该真正考虑遵循 Python naming convensions,这将使其他Python开发人员可以更轻松地为您提供帮助。

关于django - 在汇总中使用模型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com