Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Django Manytomany Abfragen seltsames Verhalten

Seit Subscription ist eine Durchgangstabelle für die m2m-Beziehung zwischen dem Post und Subscriber , wenn Sie auf einem Feld von Subscription bestellen model selbst erscheinen alle Posts als einzelne Zeilen in der Ergebnismenge und deshalb erhalten Sie s_count=1 denn jeder Beitrag mit einem bestimmten Abonnenten ist einzigartig.

Sie müssen den Post kommentieren Objekte mit dem neuesten date_subscribed aller subscribers und dann auf kommentiertem Feld bestellen:

posts = Post.objects.annotate(
            s_count=Count('subscribers'),
            s_date_max=Max('subscription__date_subscribed')
        ).order_by('-s_count', '-s_date_max')

UPDATE für die nächste Frage:

Wenn Sie count() verwenden Methode wird die Anzahl der Posts zurückgegeben . Sie können sehen, dass es sich von der Anzahl unterscheidet, die Sie von len(queryset.values_list('s_count', 'subscription__date_subscribed')) erhalten weil zu diesem Zeitpunkt die einzelnen Werte für Datumsangaben in der Ergebnismenge abgerufen wurden.