2010-08-03 15 views
27

Sono la mia applicazione Django sto il recupero di tutti gli oggetti per un particolare modello in questo modo:Come posso ottenere il numero di oggetti per un modello nei modelli di Django?

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

passo questo varbiles ai miei modelli e posso accedere a tutte le proprietà del modello come section.name, section.id , ecc.

C'è un modello chiamato Books che ha un FK per il modello Sections. Quando eseguo l'iterazione sulla variabile secs nel mio modello, come posso accedere al conteggio dei libri per ogni sezione? Qualcosa come {{ sec.Books.count }} ??

Grazie

risposta

59

Se Books ha un ForeignKey a Sections, poi Django creerà automaticamente una relazione inversa da sezioni di nuovo a libri, che si chiamerà books_set. Questo è un Manager, il che significa che puoi usare .filter(), .get() e .count() su di esso - e puoi usarli nel tuo modello.

{{ sec.books_set.count }} 

(A proposito, è necessario utilizzare nomi singolari per i vostri nomi dei modelli, non plurali -. Book invece di Books Un'istanza di quel modello contiene le informazioni per un libro, non molti.)

9

Inoltre a quanto detto da Daniel, Django crea automaticamente relazioni inverse (come ha detto Daniel sopra) a meno che non si sostituisca il loro nome con l'argomento related_name. Nel vostro caso particolare, si dovrebbe avere qualcosa di simile:

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

Quindi è possibile accedere i libri della sezione contano nel modello da:

{{ sec.books.count }} 

Come accennato nella sua interrogazione.

Problemi correlati