Результаты QuerySet дублируются при объединении запросов - PullRequest
0 голосов
/ 18 февраля 2019

Итак, я пытаюсь объединить запросы.Это то, что я делаю

 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 голосов
/ 21 февраля 2019

Если вы выполните запрос к ManyToManyField, Django выполнит INNER JOIN, что означает, что будет строка для каждого элемента на каждой стороне соединения.Если вы хотите получить уникальные результаты, используйте distinct().

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

См. Эту статью для некоторых примеров.

...