Mysql
 sql >> Database >  >> RDS >> Mysql

Django molti e molti interrogano comportamenti strani

Da Subscription è una tabella passante per m2m relazione tra il Posts e Subscriber , quando ordini in un campo di Subscription modello stesso, tutti i post vengono visualizzati come singole righe nel set di risultati ed è per questo che ottieni s_count=1 perché ogni post con un determinato iscritto è unico.

Devi annotare il Posts oggetti con l'ultima date_subscribed di tutti gli subscribers e poi ordina sul campo annotato:

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

AGGIORNAMENTO per la prossima domanda:

Se usi count() metodo restituirà il numero di Posts . Puoi vedere che sarà diverso dal conteggio che ottieni da len(queryset.values_list('s_count', 'subscription__date_subscribed')) perché in questo momento i singoli valori per le date sono stati recuperati nel set di risultati.