次のモデル Art と ArtScore があります。
class Art(models.Model):
title = models.CharField()
class ArtScore(models.Model):
art = models.ForeignKey(Art)
date = models.DateField(auto_now_add = True)
amount = models.IntegerField()
特定のユーザー アクションによって ArtScore エントリが生成されます。たとえば、[このアートが好き] をクリックすると、その Art の一定量の ArtScore が保存されます。
今、「今週最も人気のある」ページを表示しようとしているので、その時間範囲の ArtScore 金額のみを集計するクエリが必要です。
以下のクエリを作成しましたが、欠陥があります...
popular = Art.objects.filter(
artscore__date__range=(weekago, today)
).annotate(
score=Sum('artscore__amount')
).order_by('-score')
... 日付範囲に ArtScore レコードがない Art のみを除外しますが、日付範囲外の ArtScore レコードは除外しないためです。
これを達成するための指針をいただければ幸いです。
ありがとう、
マーティン