2011-07-11 24 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) 

私は私は本当に何かを明らかに不足しているが、どのように私は、この多対多のテーブルauthors = models.ManyToManyField(Author)で作成されたレコード数のカウントを得るのですか?と思いますか単純な数

答えて

11

the docsをチェックアウト、それはかなり簡単です:

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

更新:

元の質問は、のリストを探していない、データベースのAuthorsのすべてのリストを求めていました1著者あたりの著者。

、データベース内の著者のすべてのリストを取得するには、次の

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

私は狂ったように探していたあなたを約束します。すべての例でフィルタリングされたクエリが得られます。なんらかの理由で、 '[0]'部分はあなたが埋め込んだリンクのどこにも現れません。 – super9

+0

'[0]'は単にクエリーセット内の最初の 'Book'を選択します。 'Book.objects.get(pk = 1)'(最初の 'Book'が主キー' 1'を持っていると仮定します)と同じです。 –

+0

私は 'Book.objects.get(pk = 1)'を実行すると、私のカウントで 'b = Book.objects.all()[0]'と同じ結果が得られますか? – super9