Django Rest Framework - как использовать другой формат параметров запроса? - PullRequest
1 голос
/ 19 октября 2019

Я использую [https://www.npmjs.com/package/vue-bootstrap4-table#8-filtering][1] с django-rest-framework.

Проблема в том, что этот компонент использует совершенно разные параметры запроса для сортировки, фильтрации и т. Д.

vue-bootstrap4-table

http://127.0.0.1:8000/api/products/?queryParams=%7B%22sort%22:[],%22filters%22:[%7B%22type%22:%22simple%22,%22name%22:%22code%22,%22text%22:%22xxx%22%7D],%22global_search%22:%22%22,%22per_page%22:10,%22page%22:1%7D&page=1

"filters":[{"type":"simple","name":"code","text":"xxx"}],

, тогда как Django-rest-framework нужен этот формат:

../?code__icontains=...

Я хочу выяснить, как сделатьDRF принять этот формат вместо встроенного?

Я использую просто ViewSet.

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    filter_class = ProductFilter
    filter_backends = [filters.OrderingFilter]
    ordering_fields = '__all__'

Возможно ли это?

1 Ответ

0 голосов
/ 19 октября 2019

Он переводится в:

http://127.0.0.1:8000/api/products/?queryParams={"sort":[],"filters":[{"type":"simple","name":"code","text":"xxx"}],"global_search":"","per_page":10,"page":1}&page=1

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

Я не знаю безболезненного способа заставить DRF справиться с этим автоматически. Однако, поскольку значение queryParams является допустимым JSON, вы можете переопределить методы, которые вы хотите использовать в ModelViewSet. Эта страница описывает методы, которые вы можете переопределить. Чтобы поставить JSON в диктовку, вы можете сделать json.loads(request.query_params['queryParams']). С этого момента вы можете фильтровать и заказывать вручную с помощью ORM.

Или, конечно, вы можете превратить параметры запроса в «обычные» параметры запроса на стороне клиента. Это отличная библиотека, которая может помочь вам в этом: https://medialize.github.io/URI.js/.

Кроме того, обычно не рекомендуется разрешать пользователям делать заказы на любые поля. С продуктами это, вероятно, относительно низкий риск, но не делает это обычной практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...