Как предоставить параметр маршрутизатору в django rest API? - PullRequest
1 голос
/ 10 февраля 2020

Таким образом, URL-адрес, который я пытаюсь получить, выглядит следующим образом:

127.0.01:8000/api/tech/?belongs=id

Мой маршрутизатор выглядит следующим образом:

router = routers.DefaultRouter()
router.register('tech', TechViewSet, basename="tech")

urlpatterns = [
    path('', include(router.urls)),
    re_path(r'^tech/(?P<belongs>)$', include(router.urls), name="info"),

Мой набор параметров выглядит следующим образом (также есть извлечение и список функций):

@action(detail=True, url_path='^tech/(?P<belongs>)$', methods=['get'])
    def retrieve1(self, request, group=None):
          pass

И роутер явно включен в urls.py основного проекта

Как заставить работать этот URL .. 127.0.01: 8000 / api / tech / ? принадлежит = id

Пожалуйста, помогите. и я извиняюсь, я все еще учусь, и часть маршрутизации сбивает с толку ..

Большое спасибо

1 Ответ

1 голос
/ 10 февраля 2020

Немного сложно, не зная структуры вашей модели. Но если вы используете get параметры для фильтрации, вы можете использовать django_filters, чтобы сделать тяжелую работу за вас. Примерно так:

pip install django-filter

добавьте это в настройки своего остального фреймворка: 'DEFAULT_FILTER_BACKENDS':['django_filters.rest_framework.DjangoFilterBackend']

Затем в вашем TechViewSet вы можете добавить filterset_fields:

class TechViewSet:
    <your other variables>
    filterset_fields = ['belongs',]

затем вы можете добавить параметры запроса ?belongs=<some_id> к вашему URL, и ваши результаты будут отфильтрованы.

документы: https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend

...