如何查询Django ManyToMany关系

时间:2016-09-24 14:59:24

标签: django

我需要帮助才能获得查询ManyToMany字段的结果。

基本上我有以下型号:

class Book(models.Model):
    title = models.CharField(max_length=50)
    authors = models.ManyToManyField(Author)

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)

如何根据book_id和book_id查询我的书模型以显示每本书的所有作者,以及如何查询由一位作者撰写的所有书籍?

我试图按照Pizza和Topping的文档进行操作,但是我没有得到它,所以提前感谢朋友,祝你有个美好的一天。

2 个答案:

答案 0 :(得分:1)

为了让所有作者得到一本书,你只需要做:

my_book.authors.all()

第二个查询要复杂得多:你需要使用注释来获取每本书的作者数量,并过滤那些计数为1的那些:

from django.db.models import Count
Book.objects.annotate(author_count=Count('authors')).filter(author_count=1)

答案 1 :(得分:1)

要使用ManyToManyField获取书籍的所有作者,应使用related_name字段的Book. authors属性。例如:authors = models.ManyToManyField(Author, related_name="Books")

然后查询为my_author.books.all(),它是my_author.book_set.all()的语法糖