我需要帮助才能获得查询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的文档进行操作,但是我没有得到它,所以提前感谢朋友,祝你有个美好的一天。
答案 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()
的语法糖