Элемент django имеет больший len после применения другого фильтра

Как показано ниже, я пытаюсь применить новый фильтр к моему набору запросов idmatch. Но он возвращает новый набор, в котором больше объектов, чем в первом.

idmatch = IdMatch.objects.filter(idsport=idsport)
idmatchcount = idmatch.count()

idmatch_liematch = idmatch.filter(match__isnull=False)
count = idmatch_liematch.count()

print(idmatchcount, count)
605 634

Я не понимаю, как это возможно, что я получил большую длину после применения нового фильтра.

Отношение между IdMatch и Match является :

class IdMatch(models.Model):

    match = models.ManyToManyField(Match)

Ps : Я проверяю набор запросов 'idmatch_liematch' и он получил несколько двойных пк... Кто-нибудь знает почему и можно ли сделать то же самое без двойных пк.

Спасибо

Сделает LEFT OUTER JOIN и посчитает для каждого IdMatch количество связанных Matches. Это означает, что если IdMatch связан с двумя Match, то он будет подсчитан дважды.

Вы можете подсчитать количество объектов с помощью .distinct() [Django-doc]:

idmatch_liematch = idmatch.filter(match__isnull=False).distinct()
count = idmatch_liematch.count()
Вернуться на верх