2

我有以下型号:

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

是否可以为此使用注释?还是应该打破几个查询?

4

1 回答 1

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]
于 2013-09-16T22:30:40.307 回答