Django:关于带查询的优化分组

2024-10-04 01:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的模型:

class ConsumptionTracking(Model):
        cat = models.ForeignKey('Cat', null=True, db_index=True, blank=True)
        time = models.TimeField(null=False, blank=False)
        date = models.DateField(null=False, db_index=True, blank=False)
        water_amount = models.IntegerField(null=True, blank=True)
        food_amount = models.IntegerField(null=True, blank=True)

我想检索某个日期的所有对象,并按日期对它们进行分组,例如:

{"01-02-2016": [ConsumptionTracking<1>, ConsumptionTracking<2>], 
"02-02-2016": [ConsumptionTracking<3>, ConsumptionTracking<x>, ConsumptionTracking<x+1>]}

有数千个条目,我发现使用set和for循环的唯一方法大约需要2秒,这太多了:

model = ConsumptionTracking
user = request.user
data = set(i for i in model.objects.filter(cat=cat, cat__owner=user, date__gte=date_from))
date_set = set([str(o.date) for o in data])
aggregated = dict([(d, []) for d in date_set])
for d in date_set:
    for o in data:
        if str(o.date) == d:
            aggregated[d].append(ConsumptionTrackingSerializer(o).data)

我可以在QuerySet级别执行此操作吗?我能跑得更快吗

谢谢


Tags: infalsetruefordbdatadateindex