2010-08-03 20 views
27

yo soy mi aplicación Django que estoy ir a buscar todos los objetos para un modelo particular de esta manera:¿Cómo puedo obtener el conteo de objetos para un modelo en las plantillas de Django?

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

paso esta varbiles a mis plantillas y puedo acceder a todas las propiedades del modelo como section.name, section.id , etc.

Hay un modelo llamado Books que tiene un modelo FK al Sections. Cuando itero sobre la variable secs en mi plantilla, ¿cómo puedo acceder al recuento de libros para cada sección? Algo así como {{ sec.Books.count }} ??

Gracias

Respuesta

59

Si Books tiene un ForeignKey a Sections, entonces Django creará automáticamente una relación inversa entre las secciones de vuelta a los libros, que se llamará books_set. Este es un Administrador, lo que significa que puede usar .filter(), .get() y .count() en él, y puede usarlos en su plantilla.

{{ sec.books_set.count }} 

(Por cierto, se debe utilizar nombres en singular para sus nombres de modelos, no plurales -. Book en lugar de Books Un ejemplo de ese modelo tiene información de un libro, no muchos.)

9

Adicionalmente a lo que Daniel dijo, Django crea relaciones inversas automáticamente (como dijo Daniel anteriormente) a menos que anule sus nombres con el argumento related_name. En su caso particular, tendría algo así como:

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

A continuación, puede acceder a los libros de la sección de cuenta en la plantilla por:

{{ sec.books.count }} 

Como se dio a entender en su pregunta.

Cuestiones relacionadas