ModelViewSet смешивает шаблоны URL в методе получения - PullRequest
0 голосов
/ 18 июня 2020

У меня определен ModelViewSet. Исходя из моих требований, все мои методы просмотра должны работать с определенным шаблоном URL, который выглядит примерно так:

/api/app/system_name/subsystem_name/object_name

Их я извлекаю из kwargs в методе get_qeryset и фильтрую запросы.

Теперь, для моих методов получения, удаления и размещения, мне также нужно получить pk, поэтому адрес API должен быть:

/api/app/system_name/subsystem_name/object_name/pk

Моя проблема в том, когда я добавьте значение pk к URL-адресу, kwargs все испорчено и выглядит примерно так:

{'system_name': 'system_name/subsystem_name', 'subsystem_name': 'object_name', 'object_name': 'pk'}

Мне нужен мой метод списка для работы с этим:

/api/app/system_name/subsystem_name/object_name

и мои методы удаления, размещения и извлечения работают следующим образом:

/api/app/system_name/subsystem_name/object_name/pk

Вот как зарегистрирован мой маршрутизатор и мой urlpattern:

router.register("(?P<system_name>.+)/(?P<subsystem_name>.+)/(?P<object_name>.+)", MyModelViewSet, basename="list_viewset")

urlpatterns = [
    path('', include(router.urls))
]

Я просто не могу заставить это работать правильно. Я прочитал здесь документацию и много вопросов и ответов, но до сих пор не могу понять этого.

1 Ответ

0 голосов
/ 20 июня 2020

Оказывается, я платил за непонимание регулярных выражений.

Я изменил регулярное выражение, которое использовал для регистра маршрутизатора, и все работает нормально.

router.register("(?P<system_name>[^/]+)/(?P<subsystem_name>[^/]+)/(?P<object_name>[^/]+)", MyModelViewSet, basename="list_viewset")
...