Django many2many 是另一个集合的子集

Django many2many is a subset of another set

给定一个带有 m2m 字段的模型,假设 Article 有多个 Authors。 获取所有文章的最有效方法是什么,其中作者的集合是另一个集合的子集?

class Article(models.Model):
    authors = models.ManyToManyField('Author')

获取由此列表中的一位或多位作者撰写但没有不属于此列表的作者的所有文章。

authors_list = ['Tom', 'John', 'Sara', 'Kati']

在不了解您的作者模型的情况下,这只是一个猜测,但这种通用方法应该有效:

authors = Author.objects.filter(first_name__in=authors_list)
others = Author.objects.exclude(first_name__in=authors_list)
queryset = Article.objects.filter(authors__in=authors)
queryset = queryset.exclude(authors__in=others)