Django:关于使用QuerySet进行优化分组

时间:2016-05-11 14:13:12

标签: python django orm django-queryset

我有一个这样的模型:

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级别执行此操作吗?我可以做得更好更快吗?

感谢。

0 个答案:

没有答案