Фильтровать диапазон цен с помощью django-filter

Я добавил фильтр ценового диапазона с помощью Django-filter, но, похоже, он не работает

filters.py

from django_filters import FilterSet
from .models import Apartment

class ApartmentFilter(FilterSet):
    class Meta:
        model = Apartment
        fields = {
            'price': ['lt','gt']
        }
<
class ApartmentViewSet(viewsets.ModelViewSet):
    queryset = Apartment.objects.all().order_by('-timestamp')
    serializer_class = ApartmentSerializer
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly, IsOwnerApartmentOrReadOnly]

    filter_backends = [filters.SearchFilter,
                       DjangoFilterBackend, filters.OrderingFilter]
    filter_class = ApartmentFilter
    search_fields = ['address']
    filterset_fields = ['category', 'district']
    ordering_fields = ('price',)
class ApartmentFilter(filters.FilterSet):
    min_price = filters.NumberFilter(field_name="price", lookup_expr='gt')
    max_price = filters.NumberFilter(field_name="price", lookup_expr='lt')
    class Meta:
        model = Apartment
        fields = ['category', 'district']

class ApartmentViewSet(viewsets.ModelViewSet):
    queryset = Apartment.objects.all().order_by('-timestamp')
    serializer_class = ApartmentSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerApartmentOrReadOnly]
    filter_backends = [filters.SearchFilter, DjangoFilterBackend, filters.OrderingFilter]
    filter_class = ApartmentFilter
    search_fields = ['address']

Подробнее о документации здесь

Вы можете использовать встроенные RangeFilter:

from django_filters import FilterSet, RangeFilter


class ApartmentFilter(FilterSet):
    price = RangeFilter()

    class Meta:
        model = Apartment
        fields = ['price']

Затем, в параметрах запроса отправьте его как price_min и price_max.

Например, <your_api_endpoint>/?price_min=100&price_max=200

Вернуться на верх