2

次のモデル 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 レコードは除外しないためです。

これを達成するための指針をいただければ幸いです。

ありがとう、

マーティン

4

1 に答える 1

4

これによると、次のように なります。ドキュメントは間違っていますか?多分バグ?

「2 番目のクエリでは、注釈付きのカウントに良い本のみが含まれます。」

に関してで:

>>> Publisher.objects.filter(book__rating__gt=3.0).annotate(num_books=Count('book'))

これをクエリに変更します (ここでは順序は忘れてください)。

Art.objects.filter(
    artscore__date__range=(weekago, today)
).annotate(
    score=Sum('artscore__amount')
)

今、私たちは言うことができます

「クエリには、注釈付き合計の日付範囲のアートスコアのみが含まれます。」

于 2009-11-13T16:48:43.857 に答える