链接查询时QuerySet结果重复

时间:2019-02-18 04:01:20

标签: django django-orm

因此,我尝试将查询链接在一起。这就是我在做的

 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)

1 个答案:

答案 0 :(得分:1)

如果您在ManyToManyField上执行查询,则Django将执行INNER JOIN,这意味着联接每一侧的每个项目都将有一行。如果您希望获得独特的结果,请使用Android 6.0 release notes

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

有关某些示例,请参见此distinct()