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
Вернуться на верх