annotate() ajoute à chaque objet d'un QuerySet une valeur calculée par la base, comme un compteur ou une somme, grâce aux expressions de l'ORM (Count, Sum, F, Q, Case). Le calcul se fait en SQL, ce qui évite de boucler en Python. Les valeurs annotées sont ensuite utilisables pour filtrer ou trier.
Exemple
Author.objects.annotate(nb_posts=Count('posts')).order_by('-nb_posts')