2009-01-22 6 views
1

Dans Django, comment puis-je retourner le nombre total d'éléments (nombre) liés à un autre modèle, par exemple la façon dont stackoverflow fait une liste de questions puis sur le côté, il indique le nombre de réponses à cette question.Dans Django, comment puis-je retourner le nombre total d'éléments liés à un modèle?

C'est facile si j'obtiens le question, je peux retourner toutes les réponses liées à cette question mais quand j'affiche la liste entière de la question il devient difficile d'afficher sur le côté le compte montrant le nombre total.

Je ne sais pas si je suis clair mais je pense juste à la façon dont stackoverflow affiche ses questions avec réponse, les vues comptent à côté de chaque question!

+0

je peux vous aider si vous donner un exemple de vos modèles. –

+0

Par "il devient un peu difficile" je suppose que vous voulez dire que vous voulez éviter une requête distincte pour le nombre de réponses pour chaque question? Dans ce cas, vous aurez besoin de la réponse agrégée ci-dessous. –

+0

-1: Aucun échantillon de code. Difficile d'aider sans une sorte d'extrait ou d'exemple ou "je souhaite que cela a fonctionné comme ça" ou quelque chose de tangible. –

Répondre

1

Si vous êtes prêt à utiliser le tronc, vous pouvez profiter de la toute nouvelle annoter() méthode QuerySet ajouté juste une semaine ou si il y a, ce qui permet de résoudre ce problème exact:

http://docs.djangoproject.com/en/dev/topics/db/aggregation/

Si vous voulez coller avec Django 1.0, vous pouvez le faire d'une manière un peu moins élégante en utilisant l'argument select de la méthode extra() QuerySet. Il y a un exemple de ce que vous parlez à l'aide supplémentaire() ici:

http://docs.djangoproject.com/en/dev/ref/models/querysets/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none

Enfin, si vous avez besoin que ce soit des performances très élevé, vous pouvez denormalise le compte dans une colonne séparée. J'ai quelques exemples de la façon de le faire dans la partie de test unitaire de ma présentation ici:

http://www.slideshare.net/simon/advanced-django

Questions connexes