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()
代替,
我有两个模型,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()
代替,