Django many2many是另一组的子集

时间:2017-10-22 18:21:10

标签: python django m2m database-optimization

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

Authors

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

class Article(models.Model):
    authors = models.ManyToManyField('Author')
  • 'Tom'撰写的文章会匹配。
  • 'Tom'和'Sara'写的文章会匹配。
  • 但是,'Tom'和'Alter'写的文章不匹配。

1 个答案:

答案 0 :(得分:1)

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

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)