Django 多对一/一对多关系

Django Many to One / One to Many relationships

我有两个模型,Book 和 Author。每个 Author 有很多本书,每本书有很多作者,所以我在 Author 和 Book 之间建立了一个 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/

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

因为字段是

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

你应该做

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

附加了 _set 的字段名称是默认的,用于以另一种方式遵循关系,例如book.author_set.all()。但是,您已经设置了一个 related 名称,因此您将使用 book.authors.all() 代替,