образовательных целях
model.filter(FK-or-m2m_field ...)
делает JOIN для фильтрации. Вроде бы все логично.
Если не учитывать тот факт, что в результатах самого запроса
этот JOIN будет заложен
Идем дальше:
model.filter(some_m2m_field__lookup_expr= ...).all()
Вот тут мы ожидаем, что нам вернется "чистый и непорочный" набор инстансов.
Однако вы можете столкнуться с тем, что .count() такого вывода будет больше чем даже
вообще количество инстансов в таблице.
Почему?
Потому что .filter() для FK/m2m/1to1 полей делает JOIN.
И ORM пофигу, делали ли вы group by или annotate, у вас в запросе будет количество дубляжей инстансов модели эквивалетное количеству связанных через m2m поле инстансов
получается: len(queryset) и queryset.count() вернут разные результаты?
Обсуждают сегодня