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.