2015-11-30 192 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