我有一个这样的模型:
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级别执行此操作吗?我可以做得更好更快吗?
感谢。