От Subscription
е проходна таблица за m2m връзка между Post
и Subscriber
, когато поръчвате в поле на Subscription
самия модел, всички публикации се показват като отделни редове в набора от резултати и затова получавате s_count=1
защото всяка публикация с конкретен абонат е уникална.
Трябва да анотирате Post
обекти с най-новата date_subscribed
от всички subscribers
и след това поръчайте в анотирано поле:
posts = Post.objects.annotate(
s_count=Count('subscribers'),
s_date_max=Max('subscription__date_subscribed')
).order_by('-s_count', '-s_date_max')
АКТУАЛИЗИРАНЕ за следващия въпрос:
Ако използвате count()
метод, той ще върне броя на Posts
. Можете да видите, че ще се различава от броя, който получавате от len(queryset.values_list('s_count', 'subscription__date_subscribed'))
тъй като в този момент отделните стойности за дати са извлечени в набора от резултати.