sql >> Base de Datos >  >> RDS >> Mysql

Django manytomany consulta comportamiento extraño

Desde Subscription es una tabla directa para la relación m2m entre el Post y Subscriber , cuando realiza un pedido en un campo de Subscription modelo en sí, todas las publicaciones aparecen como filas individuales en el conjunto de resultados y es por eso que obtienes s_count=1 porque cada publicación con un suscriptor en particular es única.

Debe anotar la Post objetos con el último date_subscribed de todos los subscribers y luego ordenar en el campo anotado:

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

ACTUALIZAR para la siguiente pregunta:

Si usa count() método devolverá el número de Posts . Puede ver que diferirá del recuento que obtiene de len(queryset.values_list('s_count', 'subscription__date_subscribed')) porque en este momento los valores individuales para las fechas se han obtenido en el conjunto de resultados.