因此,我尝试将查询链接在一起。这就是我在做的
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)
答案 0 :(得分:1)
如果您在ManyToManyField
上执行查询,则Django将执行INNER JOIN
,这意味着联接每一侧的每个项目都将有一行。如果您希望获得独特的结果,请使用Android 6.0 release notes。
queryset_list = queryset_list.filter(
skills__skill_description__in=skill_filter
).distinct()
有关某些示例,请参见此distinct()
。