Sinds Subscription
is een doorgaande tabel voor m2m-relatie tussen de Post
en Subscriber
, wanneer u bestelt in een veld van Subscription
model zelf, alle berichten verschijnen als individuele rijen in de resultatenset en daarom krijg je s_count=1
omdat elk bericht met een bepaalde abonnee uniek is.
U moet de Post
. annoteren objecten met de laatste date_subscribed
van alle subscribers
en bestel dan in het geannoteerde veld:
posts = Post.objects.annotate(
s_count=Count('subscribers'),
s_date_max=Max('subscription__date_subscribed')
).order_by('-s_count', '-s_date_max')
UPDATE voor volgende vraag:
Als u count()
. gebruikt methode retourneert het het aantal Posts
. Je kunt zien dat het zal verschillen van de telling die je krijgt van len(queryset.values_list('s_count', 'subscription__date_subscribed'))
omdat op dit moment de individuele waarden voor datums zijn opgehaald in de resultatenset.