@Durilka96

Как на стороне django обрабатывать несколько параметров из POST запроса?

Парни можете пожалуйста примерчики скинуть ссылкой с каких-нибудь рабочих проектов с 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]
  • Вопрос задан
  • 301 просмотр
Решения вопроса 2
@gritsulevichV
param1 = request.data.get("name_param1")

if param1 is not None:
return param1

краще використовувати форми джанго, воно саме валідує, записує в таблиці і так далі
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
можно реализовать лучше, с лучшим масштабированием в зависимости от количества параметров


та пАйдет и так - Питон же: явное лучше неявного ))))))))

но если чо, общий подход такой: всегда есть параметры по умолчанию - вот ты из них конструируешь кверисет, и если есть not None прибывшие POST/GET параметры - в кверисете заменяешь

это позволяет гибко тюнить - например тянуть не all, а all не старше 1 года, или там не больше 1 млн или 1 тысячи айтемов и т.д. и т.п. - т.е. помимо приходящих извне часть параметров уже задано

секьюрити там всякое попутно - входящие обрабатываешь на годноту и применимость и все такое прочее
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы