Django - Фильтрация по аннотированному полю count возвращает неожиданные значения
У меня есть функция, которая фильтрует Django queryset по количеству связанных объектов. Используемая внутри проекта graphene-django, она позволяет мне динамически создавать поля фильтрации для множества объектов без написания суперповторяющегося кода.
Функция иногда работает. Когда я передаю mymodel_count__lt = 1, она показывает только записи с 0 связанными моделями. Но когда я передаю mymodel_count__gte = 3, она почему-то показывает мне записи только с 2 связанными моделями. Я что-то упустил?
Вот функция:
def filter_on_count_field(qs, **kwargs):
"""
Filters a queryset based on fields that end with the word "count" and their
corresponding values in kwargs.
"""
for filter_name, value in kwargs.items():
filter_field_name = filter_name.split("__")[0]
foreign_field_name = "_".join(filter_field_name.split("_")[:-1]) + "s"
if "__" not in filter_name or not filter_field_name.endswith("_count"):
continue
qs = qs.annotate(
**{filter_field_name: models.Count(foreign_field_name)}
).filter(**{filter_name: value})
return qs