web-dev-qa-db-fra.com

Comment puis-je obtenir le nombre d'objets pour un modèle dans les modèles Django?

Je suis mon Django je récupère tous les objets pour un modèle particulier comme ceci:

secs = Sections.objects.filter(order__gt = 5)

Je passe ces varbiles à mes modèles et je peux accéder à toutes les propriétés du modèle comme section.name, section.id, etc.

Il existe un modèle appelé Books qui a un FK vers le modèle Sections. Lorsque j'itère la variable secs dans mon modèle, comment puis-je accéder au nombre de livres pour chaque section? Quelque chose comme {{ sec.Books.count }} ??

Je vous remercie

34
Mridang Agarwalla

Si Books a une ForeignKey pour Sections, alors Django créera automatiquement une relation inverse des sections vers les livres, qui sera appelée books_set. Il s'agit d'un gestionnaire, ce qui signifie que vous pouvez utiliser .filter(), .get() et .count() dessus - et vous pouvez les utiliser dans votre modèle.

{{ sec.books_set.count }}

(Soit dit en passant, vous devez utiliser des noms singuliers pour les noms de votre modèle, pas des pluriels - Book au lieu de Books. Une instance de ce modèle contient des informations pour un livre, pas plusieurs.)

71
Daniel Roseman

En plus de ce que Daniel a dit, Django crée automatiquement des relations inverses (comme Daniel l'a dit ci-dessus) sauf si vous remplacez leurs noms par l'argument related_name. Dans votre cas particulier, vous auriez quelque chose comme:

class Book(models.Model):
    section = models.ForeignKey(Section, related_name="books")

Ensuite, vous pouvez accéder au nombre de livres de la section dans le modèle en:

{{ sec.books.count }}

Comme vous l'avez laissé entendre dans votre question.

10
Mbuso