Mysql
 sql >> Base de données >  >> RDS >> Mysql

Django manytomany interroge un comportement étrange

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.