Как отфильтровать значение isnull False в Django-фильтрах?

Я хочу фильтровать только категории, в которых есть channels__livestream__isnull=False. Кверисет работает нормально с этим параметром, но Django-filters получает ошибку TypeError: 'FilterSetMetaclass' object is not iterable.

filters.py

class CategoryFilterSet(django_filters.FilterSet):

    has_live_stream = django_filters.BooleanFilter(
        field_name='channels__livestream',
        lookup_expr='isnull',
    )

    class Meta:
        model = YTCategory
        fields = ['has_live_stream']

views.py

class CategoryList(generics.ListAPIView):
    authentication_classes = []
    permission_classes = []

    queryset = YTCategory.objects.active()
    pagination_class = Pagination
    serializer_class = CategorySerializer
    filter_backends = [DjangoFilterBackend, filters.SearchFilter]
    filterset_fields = CategoryFilterSet
    search_fields = ['id', 'name']

Согласно документации по django-rest-framework (https://www.django-rest-framework.org/api-guide/filtering/#overriding-the-initial-queryset), похоже, что вам следует установить filterset_class вместо filterset_fields в вашем views.py:

class CategoryList(generics.ListAPIView):
    authentication_classes = []
    permission_classes = []

    queryset = YTCategory.objects.active()
    pagination_class = Pagination
    serializer_class = CategorySerializer
    filter_backends = [DjangoFilterBackend, filters.SearchFilter] 
    filterset_class = CategoryFilterSet # Changed from filterset_fields
    search_fields = ['id', 'name']
Вернуться на верх