Фильтровать диапазон цен с помощью 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