511 votes

Comment interroger comme GROUP BY dans django ?

J’ai interroger un modèle,

et elle retourne dire

Ce que je veux est, à savoir la meilleure façon de Django au feu une requête group_by à ma db, aussi comme,

Qui ne fonctionne pas bien sûr. Je sais que nous pouvons faire quelques trucs sur « django/db/models/query.py », mais je suis juste curieux de savoir comment le faire sans patcher.

Merci

762voto

Guðmundur H Points 3323

Si vous veux faire l’agrégation et que vous utilisez 1.1 Django (actuellement en alpha 1), vous pouvez utiliser les nouvelles fonctions d’agrégation de l’ORM:

Cela se traduit par une requête similaire à

et la sortie serait de la forme

79voto

Michael Points 676

Une solution facile, mais pas dans une bonne façon est d'utiliser des-SQL:

http://docs.djangoproject.com/en/dev/topics/db/sql/#topics-db-sql

Une autre solution est d'utiliser le group_by propriété:

query = Members.objects.all().query
query.group_by = ['designation']
results = QuerySet(query=query, model=Members)

Vous pouvez maintenant effectuer une itération sur les résultats de la variable à récupérer vos résultats. Notez que group_by n'est pas documentée et peut être modifié dans les prochaines version de Django.

Et... pourquoi voulez-vous utiliser group_by? Si vous n'utilisez pas l'agrégation, vous pouvez utiliser order_by à obtenir un comme résultat.

4voto

Van Gale Points 21982

Vous devrez effectuer SQL personnalisé comme illustré dans cet extrait de code :

Custom SQL par l’intermédiaire de sous-requête

Ou dans un gestionnaire personnalisé comme indiqué dans la documentation en ligne de Django :

Ajout des méthodes de gestionnaire d’appoint

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