2011-07-11 17 views
8
class Author(models.Model): 
    name = models.CharField(max_length=100) 
    age = models.IntegerField() 
    friends = models.ManyToManyField('self', blank=True) 

class Publisher(models.Model): 
    name = models.CharField(max_length=300) 
    num_awards = models.IntegerField() 

class Book(models.Model): 
    isbn = models.CharField(max_length=9) 
    name = models.CharField(max_length=300) 
    pages = models.IntegerField() 
    price = models.DecimalField(max_digits=10, decimal_places=2) 
    rating = models.FloatField() 
    authors = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher) 
    pubdate = models.DateField() 

class Store(models.Model): 
    name = models.CharField(max_length=300) 
    books = models.ManyToManyField(Book) 

Creo que me falta algo muy obvio, pero ¿cómo puedo obtener un recuento del número de registros creados en este muchos-a-muchos mesa authors = models.ManyToManyField(Author)?recuento simple del número de registros en la tabla ManyToMany

Respuesta

11

Salida the docs, es bastante simple:

b = Book.objects.all()[0] 
b.authors.count() 

Actualización:

La pregunta original estaba pidiendo una lista de todos los autores en la base de datos, no en busca de una lista de autores por libro.

Para obtener una lista de todos los autores en la base de datos:

Author.objects.count() ## Returns an integer. 
+0

te prometo que yo estaba buscando como locos. Todos los ejemplos dan una consulta filtrada. Por alguna razón, la parte '[0]' no aparece en ningún lado, ni siquiera en el enlace que incrustó. – super9

+0

El '[0]' simplemente selecciona el primer 'Libro' en el conjunto de consulta. Es lo mismo que decir: 'Book.objects.get (pk = 1)' (suponiendo que el primer 'Book' tiene la clave primaria de' 1'). –

+0

Entonces, si hago 'Book.objects.get (pk = 1)', obtendré el mismo resultado en 'b = Book.objects.all() [0]' en mi recuento? – super9

Cuestiones relacionadas