Subscription
以降 Post
間のm2m関係のスルーテーブルです。 およびSubscriber
、Subscription
のフィールドで注文した場合 モデル自体では、すべての投稿が結果セットに個別の行として表示されるため、s_count=1
が取得されます。 特定のサブスクライバーを持つ各投稿は一意であるためです。
Post
に注釈を付ける必要があります 最新のdate_subscribed
を持つオブジェクト すべてのsubscribers
の 次に、注釈付きフィールドで注文します:
posts = Post.objects.annotate(
s_count=Count('subscribers'),
s_date_max=Max('subscription__date_subscribed')
).order_by('-s_count', '-s_date_max')
次の質問の更新:
count()
を使用する場合 メソッドは、Posts
の数を返します 。 len(queryset.values_list('s_count', 'subscription__date_subscribed'))
から取得したカウントとは異なることがわかります。 この時点で、日付の個々の値が結果セットにフェッチされているためです。