Python 使用uu in=[somelist]筛选模型的ManyToMany字段时,当它应该生成多个字段时,会生成零结果

Python 使用uu in=[somelist]筛选模型的ManyToMany字段时,当它应该生成多个字段时,会生成零结果,python,django,many-to-many,django-queryset,Python,Django,Many To Many,Django Queryset,我还没有在网上找到解决办法——我不可能是第一个尝试这样做的人 以下是我的模型结构: class TopModel(models.Model): type = models.CharField() class MiddleModel(models.Model): parent = models.ForeignKey(TopModel) class LowerModel(model.Model): middleParent = models.ForeignKey(Midd

我还没有在网上找到解决办法——我不可能是第一个尝试这样做的人

以下是我的模型结构:

class TopModel(models.Model):
    type = models.CharField()

class MiddleModel(models.Model):
    parent = models.ForeignKey(TopModel)

class LowerModel(model.Model):
    middleParent = models.ForeignKey(MiddleModel)
    topParent = models.ForeignKey(TopModel, related_name="ref_to_top_parent")
    topmodel_refs = models.ManyToMany(TopModel, related_name="ref_to_other_tops")
我需要通过一些奇怪的查询进行筛选。我使用MiddleModel对顶级模型进行两次过滤,您将看到

因此,我创建了两个查询集:

currentMidMod = MiddleModel.objects.get(pk=1)
firstQuerySet = currentMidMod.topmodel_set.all()

secondMidMod = MiddleModel.objects.get(pk=2)
secondQuerySet = secondMidMod.topmodel_set.all()
然后我过滤第一个:

firstQuerySet = firstQuerySet.filter(type__contains="somevalue")
然后我过滤第二个:

secondQuerySet = secondQuerySet.filter(type__contains="test") #produces a count() of 10
#Grab a valueset of the pks
compareList = list(secondQuerySet.values_list('pk', flat=True))
那么问题就出现在这里:

newQuerySet = firstQuerySet.filter(ref_to_top_parent__topmodel_refs__in=compareList)

newQuerySet.count() #equals 0 when I know it should equal 5
因此,我试图通过将我的第一个queryset与我创建的值列表中的pk值列表进行比较,通过所有的LowerModel reverse foreignkeys筛选出我的第一个queryset

它从未找到匹配的“pks”,即使我可以手动通过phpAdmin查找匹配项

我要死了。请帮忙

编辑:当尝试查询单个PK而不是列表时,它工作正常,例如

newQuerySet = firstQuerySet.filter(ref_to_top_parent__topmodel_refs__pk=74956)

当试图将该多个字段与包含“74956”的值列表进行比较时,它没有找到任何匹配项,至少应该在我想象的值列表中找到“74956”。

正如在对原始问题的评论中所讨论的,没有在多个关系的中间表中创建条目。我只想要互联网积分!:

firstQuerySet中的计数是多少?实际上这并不重要,第二个queryset大约是112000,第二个queryset大约是500。问题是,最下面的模型与TopModels有很多关系,我需要通过将反向查找的ManyToMany字段与值列表进行比较,混淆地过滤掉TopModels。我甚至不确定这是否可能。好吧,如果它是0,那就很重要了!如果是零,那就很重要对不起,我不确定问题出在哪里。是否已检查以确保将条目添加到多个字段的中间表中?