Django多对一/一对多的关系

时间:2015-11-30 22:26:45

标签: django many-to-many

我有两个模型,Book和Author。每个作者都有很多书,每本书都有很多作者,所以我在作者和书之间建立了一个ManyToMany关系如下:

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

class Book(models.Model):
    # some fields

我有一些方便的警报ID,我需要将每个图书对象与相关作者联系起来,所以我这样做(假设我有所有这些对象的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文档中的约定,但它似乎不适合我: https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/

有人可以解释为什么我会遇到这个错误吗?

1 个答案:

答案 0 :(得分:3)

由于该字段是

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

你应该做

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

附加_set的字段名称是以另一种方式跟踪关系的默认值,例如book.author_set.all()。但是,您设置了related名称,因此您将改为使用book.authors.all()