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 に答える