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']
- 'Tom' 撰写的文章将匹配。
- 'Tom' 和 'Sara' 撰写的文章将匹配。
- 但是,'Tom' 和 'Alter' 撰写的文章不匹配。
在不了解您的作者模型的情况下,这只是一个猜测,但这种通用方法应该有效:
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)
给定一个带有 m2m 字段的模型,假设 Article
有多个 Authors
。
获取所有文章的最有效方法是什么,其中作者的集合是另一个集合的子集?
class Article(models.Model):
authors = models.ManyToManyField('Author')
获取由此列表中的一位或多位作者撰写但没有不属于此列表的作者的所有文章。
authors_list = ['Tom', 'John', 'Sara', 'Kati']
- 'Tom' 撰写的文章将匹配。
- 'Tom' 和 'Sara' 撰写的文章将匹配。
- 但是,'Tom' 和 'Alter' 撰写的文章不匹配。
在不了解您的作者模型的情况下,这只是一个猜测,但这种通用方法应该有效:
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)