Как отфильтровать значение 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']