2
假设我有ID的名单:C = [“1”,“2”,“3”]Django的多对多筛选确切名单
class Topic(Model):
categories=ManyToManyField(Category)
我如何可以筛选具有确切的主题,只有类别与ID从C?
假设我有ID的名单:C = [“1”,“2”,“3”]Django的多对多筛选确切名单
class Topic(Model):
categories=ManyToManyField(Category)
我如何可以筛选具有确切的主题,只有类别与ID从C?
你需要调用.filter(categories=category_id)
在c
列表中的每个元素。
c = [1, 2, 3]
topics = reduce(lambda qs, pk: qs.filter(categories=pk), c, Topic.objects.all())
,然后如果你想排除其他类别的主题(例如用[1,2,3,4]
的话题),那么你需要的总数.annotate
和.filter
。
c = [1, 2, 3]
initial_qs = Topic.objects.annotate(cnt=models.Count('categories')).filter(cnt=len(c))
topics = reduce(lambda qs, pk: qs.filter(categories=pk), c, initial_qs)
试试这个:
c = [1, 2 , 3]
result = Topic.objects.filter(categories__id__in=c)