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
Libérer: 2024-12-04 08:14:12
original
939 Les gens l'ont consulté

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()
)
Copier après la connexion

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

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]
Copier après la connexion

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

    .values('designation', 'first_name', 'last_name')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal