Парни можете пожалуйста примерчики скинуть ссылкой с каких-нибудь рабочих проектов с django rest framework, как из POST запроса извлекать несколько параметров (3-5) для фильтрации, как правильнее это во views прописывать, чтобы по человечески было. Смотрел ссылку
https://www.django-rest-framework.org/api-guide/fi... , но сомнения по поводу
if param_example is not None:
....
как-то не укладывается, как можно так несколько параметров обрабатывать, а так получается очень много вариаций для фильтрации получается...
Для примера сейчас у меня фильтруется вот так, но я думаю что такой подход корявый и можно реализовать лучше, с лучшим масштабированием в зависимости от количества параметров:
class CatalogDisksViewSet(viewsets.ModelViewSet):
def get_queryset(self):
queryset = CatalogDisks.objects.all()
parameterSize = self.request.query_params.get('size-disk')
parameterFilterPrice = self.request.query_params.get('filter-price')
if(parameterSize and parameterFilterPrice=='null'):
parameterSize = [float(x) for x in parameterSize.split(",")]
queryset = CatalogDisks.objects.all().filter(size__size__in=parameterSize)
elif (parameterSize=='' and parameterFilterPrice == 'up'):
queryset = CatalogDisks.objects.order_by('price')
elif (parameterSize=='' and parameterFilterPrice == 'down'):
queryset = CatalogDisks.objects.order_by('-price')
elif (parameterSize!='' and parameterFilterPrice=='up'):
parameterSize = [float(x) for x in parameterSize.split(",")]
queryset = CatalogDisks.objects.order_by('price').filter(size__size__in=parameterSize)
elif (parameterSize!='' and parameterFilterPrice=='down'):
parameterSize = [float(x) for x in parameterSize.split(",")]
queryset = CatalogDisks.objects.order_by('-price').filter(size__size__in=parameterSize)
return queryset
serializer_class = CatalogDisksSerializer
pagination_class = PaginationDisks
permission_classes = [permissions.IsAuthenticatedOrReadOnly]