繁体   English   中英

如何根据确切的查询集过滤 Django ManyToManyField?

[英]How to filter Django ManyToManyField based upon exact queryset?

我们如何根据ManyToManyField中的确切值过滤 django model 实例。 考虑以下示例:假设我们有两个模型:

class Author(models.Model):
    name=models.CharField(max_length=200)

class Book(models.Model):
    authors=models.ManyToManyField(Author)

我想过滤所有只有给定 id 的给定作者的书。 如果我希望按作者 ID 1, 2, 3过滤查询集。 我试过这样做:

Book.objects.filter(authors__id__in=[1,2,3])

这不起作用,因为它为我提供了具有这些 id 的作者以及其他作者的书籍列表。 如何过滤书籍,使作者仅在这些 ID 中

您可以在ManyToManyField related_name字段中传递一个related_name,然后在过滤器查询中使用它。

Class Book(models.Model):
authors = models.ManyToManyField(Author, related_name='authors')

并尝试运行查询:

Book.objects.filter(authors__id__in=[1,2,3])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM