Maison >développement back-end >Tutoriel Python >Comment regrouper les résultats d'une requête dans Django sans utiliser group_by() ?

Comment regrouper les résultats d'une requête dans Django sans utiliser group_by() ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 08:14:121006parcourir

How to Group Query Results in Django Without Using group_by()?

Requête avec GROUP BY dans Django

Lors de l'interrogation d'un modèle de base de données, il est souvent nécessaire de regrouper les résultats par un champ spécifique pour obtenir informations agrégées. Dans Django, cette fonctionnalité n'est pas directement supportée par la méthode group_by. Cependant, il existe plusieurs approches pour obtenir un résultat similaire sans modifier la base de code de Django.

Une approche consiste à exploiter les fonctionnalités d'agrégation de Django. L'agrégateur Count peut être utilisé pour compter le nombre d'occurrences d'un champ, regroupées par un champ spécifié. Par exemple, pour regrouper les membres par leur désignation et compter les occurrences de chaque désignation :

from django.db.models import Count
result = (Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)

Cette requête produit des résultats similaires à :

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]

Plusieurs champs peuvent être inclus dans les valeurs argument pour renvoyer des informations supplémentaires. Par exemple :

    .values('designation', 'first_name', 'last_name')

La documentation Django fournit des informations détaillées sur les constructions Values(), Annotate() et Count :

  • [Documentation Django : Values()]( https://docs.djangoproject.com/en/stable/ref/models/querysets/#values)
  • [Django Documentation : annotate()](https://docs.djangoproject.com/en/stable/ref/models/querysets/#annotate)
  • [Documentation Django : Count](https://docs.djangoproject .com/en/stable/ref/models/lookups/#count)

Il est important de noter qu'en excluant le L'argument order_by() peut conduire à des résultats inattendus, surtout si le comportement de tri par défaut n'est pas souhaitable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn