【问题标题】:How to Query Django ManyToMany Relationship如何查询 Django 多对多关系
【发布时间】:2017-02-02 07:35:07
【问题描述】:

我需要帮助来获取查询我的 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 的文档,但我没有得到它,所以提前感谢朋友们,祝你有个美好的一天。

【问题讨论】:

    标签: django


    【解决方案1】:

    要让所有作者都得到一本书,您只需这样做:

    my_book.authors.all()
    

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

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

    【讨论】:

    • 先生:丹尼尔,我再次需要你的帮助,现在我可以使用以下方法查询作者姓名:book = get_object_or_404(Book, pk=id) authors = book.authors.all(),但是问题是我得到以下格式的结果:作者:[, ],所以我如何在没有模型和列表以及 标签的情况下呈现作者姓名。我面临的另一个问题是如何在不将 book_id 传递给函数“def books_list(request):”的情况下呈现每本书的作者,以防在索引页面中显示所有书籍。非常感谢你。
    • 首先你应该接受这个问题的答案;那么你应该将你的后续问题作为一个单独的问题提出。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2013-11-22
      • 2011-11-13
      • 1970-01-01
      • 2014-07-14
      • 2021-03-07
      • 2019-05-18
      相关资源
      最近更新 更多