Depuis Subscription
est une table de passage pour la relation m2m entre le Post
et Subscriber
, lorsque vous commandez sur un champ Subscription
modèle lui-même, tous les messages apparaissent sous forme de lignes individuelles dans le jeu de résultats et c'est pourquoi vous obtenez s_count=1
car chaque publication avec un abonné particulier est unique.
Vous devez annoter le Post
objets avec le dernier date_subscribed
de tous les subscribers
puis commandez sur champ annoté :
posts = Post.objects.annotate(
s_count=Count('subscribers'),
s_date_max=Max('subscription__date_subscribed')
).order_by('-s_count', '-s_date_max')
MISE À JOUR pour la question suivante :
Si vous utilisez count()
méthode, il renverra le nombre de Posts
. Vous pouvez voir qu'il sera différent du nombre que vous obtenez de len(queryset.values_list('s_count', 'subscription__date_subscribed'))
car pour le moment, les valeurs individuelles des dates ont été récupérées dans le jeu de résultats.