gpt4 book ai didi

Django 多对多过滤器精确列表

转载 作者:行者123 更新时间:2023-12-04 23:40:03 32 4
gpt4 key购买 nike

假设我有一个 id 列表: c = ['1', '2' , '3']

class Topic(Model):

categories=ManyToManyField(Category)

如何过滤具有来自 c 的 id 的确切且唯一类别的主题?

最佳答案

您需要调用.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)

关于Django 多对多过滤器精确列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505500/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com