2015-11-30 188 views
2

我有兩種模式,書籍和作者。每個作者都有很多書,每本書有許多作家,所以我成立了作者與書之間的多對多關係,如下所示:Django多對一/一對多關係

class Author(models.Model): 
    books = models.ManyToManyField(Book, related_name='authors') 

class Book(models.Model): 
    # some fields 

我有一定的警示標識方便,我需要每本書的對象與關聯相關作者,所以我(假設我對所有這些對象得心應手ID):

author = Author.objects.get(pk=id) 
book = Book.objects.get(pk=book_id) 
author.books.add(book) 
logger.debug(author.book_set.all()) 

我得到的錯誤:

AttributeError: 'Book' object has no attribute 'author_set'. 

我下面從Django的DOCUME慣例ntation在這裏,但它似乎並不適合我: https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/

有人可以解釋爲什麼我可能會遇到此錯誤?

回答

2

由於該領域是

class Author: 
    books = models.ManyToManyField(Book, related_name='authors') 

你應該做

logger.debug(author.books.all()) 

的字段名稱與_set附加是其他方式下面的關係,例如默認book.author_set.all()。但是,您已設置related名稱,因此您將使用book.authors.all()代替,

+0

將相關名稱設置爲'books'意味着您將使用'book.books.all()'獲取書籍的作者。我不確定這真的很有意義。 –

+0

@JoeyWilhelm我誤解了這個問題,現在我已經修復了。 – Alasdair