首页 > 解决方案 > 链接查询时 QuerySet 结果重复

问题描述

所以我试图将查询链接在一起。这就是我正在做的

 queryset_list = modelEmployee.objects.filter(stars__lte=3)
 A = len(queryset_list) #A=2
 queryset_list = queryset_list.filter(skills__skill_description__in=skill_filter)
 A = len(queryset_list) #A=4

因此,根据上述情况,我想得到两个结果,但我得到了四个。似乎第一个查询的结果在第二个查询中被复制,因此结果为 4。关于为什么结果被复制以及如何解决这个问题的任何建议?我期望只得到两个项目,因为它通过了两个过滤器。

这是模型

class modelEmployee(models.Model):
    user                = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    skills              = models.ManyToManyField(modelSkill, blank=True)
    location            = models.PointField(srid=4326,max_length=40, blank=True,null=True)

标签: djangodjango-orm

解决方案


如果您在ManyToManyFieldDjango 上进行查询,则会执行 an INNER JOIN,这意味着连接的每一侧的每个项目都会有一行。如果您想获得独特的结果,请使用distinct().

queryset_list = queryset_list.filter(
    skills__skill_description__in=skill_filter
).distinct()

有关一些示例,请参阅本文


推荐阅读