Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Django manytomany consulta comportamento estranho


Desde Subscription é uma tabela de passagem para a relação m2m entre o Post e Subscriber , quando você faz um pedido em um campo de Subscription model, todas as postagens aparecem como linhas individuais no conjunto de resultados e é por isso que você obtém s_count=1 porque cada postagem com um determinado assinante é única.

Você precisa anotar o Post objetos com o date_subscribed mais recente de todos os subscribers e, em seguida, ordene no campo anotado:
posts = Post.objects.annotate(
            s_count=Count('subscribers'),
            s_date_max=Max('subscription__date_subscribed')
        ).order_by('-s_count', '-s_date_max')

ATUALIZAÇÃO para a próxima pergunta:

Se você usar count() ele retornará o número de Posts . Você pode ver que será diferente da contagem obtida em len(queryset.values_list('s_count', 'subscription__date_subscribed')) porque neste momento os valores individuais para datas foram buscados no conjunto de resultados.