2
most_viewed_videos = Video.objects.filter(
                videowatch__created__month=today.month,
                viewing__status="D"
            ).annotate(
                count=Count("videowatch"),
                viewing_count=Sum("viewing")
            ).values("count", "viewing_count").order_by(
                "-viewing_count",
                "-count"
            )

ねえ、私はこのコード スニペットを持っています。私の質問は、countandを合計viewing_countして 1 つの結果にする方法です。

試してみましたが、何が機能していたのかわかりません。

編集:私のために働いていた解決策

        most_viewed_videos = Video.objects.filter(
            videowatch__created__month=today.month,
            viewing__status="D"
        ).extra(
            select={'total': 'COUNT("videowatch") + SUM(CAST("viewing" as CHAR))'}
        ).values("total").order_by("-total")
4

2 に答える 2

1

.extra queryset メソッドを使用してそれを実現できます。

most_viewed_videos = Video.objects.filter(
        videowatch__created__month=today.month,
        viewing__status="D"
    ).annotate(
        count=Count("videowatch"),
        viewing_count=Sum("viewing")
    .extra(
        select={'total': 'COUNT(videowatch)+SUM(viewing)'}
    )
    ).values("count", "viewing_count").order_by(
        "-viewing_count",
        "-count"
)

私はそれをテストしていません。同様の問題「以前に注​​釈が付けられた値の注釈」に直面しました。それは不可能のようです。私は過去にチケットをオープンしましたが、クローズされました。

于 2013-08-06T15:14:03.780 に答える