我还没有在网上找到解决办法--我不是第一个尝试这个的人。你知道吗
以下是我的模型结构:
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
因此,我试图通过将我的第一个查询集与我创建的值列表中的一个pk值列表进行比较,来过滤我的第一个查询集,通过它的所有低模型反向foreignkeys,通过那些低模型许多键列表返回TopModels
它从来没有找到匹配的'pks',即使我可以手动通过phpAdmin查找匹配自己
我要死了。请帮帮我!你知道吗
编辑:当试图查询一个PK而不是一个列表时,它可以正常工作
newQuerySet = firstQuerySet.filter(ref_to_top_parent__topmodel_refs__pk=74956)
当试图将这个ManyToMany字段与一个list()值(包括'74956')进行比较时,它找不到任何匹配项——它至少应该在我想象的值列表中找到'74956'。你知道吗
正如在对原始问题的评论中所讨论的,没有在多人关系的中间表中创建条目。我只想上网!:)
相关问题 更多 >
编程相关推荐