我有以下型号:
class Item(models.model):
price = models.floatField()
...
和:
class purchase(models.model):
user = models.ForeignKey(User)
item = models.ForeignKey(Item)
date = models.DateField()
我想提出一个查询,它将提供上周购买量最多的前10位用户。我还希望在那一周内完成购买的总和。
因此,我希望在我的页面上显示的输出与此类似:
本周最佳买家:
1. User_1 | 150 Points
2. User_2 | 130 Points
...
10. User_10 | 10 Points
是否可以使用注释?或者应该打破几个查询?
答案 0 :(得分:1)
好吧,让我们一试(仍然需要针对优化的SQL进行测试):
from datetime import timedelta
from django.db.models import Sum
from django.contrib.auth.models import User
from django.utils import timezone
some_day_last_week = timezone.now().date() - timedelta(days=7)
rows = User.objects.filter(purchases__date__gte=some_day_last_week)\
.annotate(item_sum=Sum('purchases__item__price'))\
.order_by('item_sum')[:10]
print [(u.username, u.item_sum) for u in rows]