1 votes

Est-il possible d'utiliser l'agrégation sur une annotation queryset ?

J'utilise annoter sur un queryset django :

class MyModel(models.Model):
   my_m2m = models.ManytoManyField()

my_qs = MyModel.objects.all().annotate(total_m2m=Count('my_m2m'))

On obtient ainsi le résultat souhaité. Par exemple

>>> my_qs[0].total_m2m
>>> 3

Comment puis-je utiliser agrégat pour compter le nombre total de my_m2m dans le queryset ? Par exemple

>>> my_qs.aggregate_m2m
>>> 9

1voto

CommuSoft Points 6439

Tu peux résumer, donc :

from django.db.models import Count, Sum

MyModel.objects.annotate(total_m2m=Count('my_m2m')).aggregate(
    total=Sum('total_m2m')
)

mais ici, il est plus logique d'agréger immédiatement :

from django.db.models import Count

MyModel.objects.aggregate(
    total=Count('my_m2m')
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X