URL-адреса включенных приложений не отображаются в просматриваемом API DRF

Я использую Django Rest Framework для предоставления API, который отлично работает.

Все необходимые URL для маршрутизаторов и других устройств хранятся в корневом urls.py Чтобы лучше справиться с растущим количеством маршрутов, я попытался перенести маршруты из Apps в соответствующие папки app - как это делается в чистом Django.

# urls.py
from django.contrib import admin
from django.urls import include, path
from rest_framework.routers import DefaultRouter

import core.views

router = DefaultRouter()

router.register(r'core/settings', core.views.SettingsViewSet, basename='settings')
router.register(r'core/organization', core.views.OrgViewSet, basename='org')

urlpatterns = [
    path('api/', include(router.urls)),
    path('api/een/', include('een.urls')),
    path('admin/', admin.site.urls),
    path('', include('rest_framework.urls', namespace='rest_framework')),
    path('api/tokenauth/', authviews.obtain_auth_token),
]
# een/urls.py
from django.urls import path, include
from rest_framework import routers

from . import views

app_name = 'een'
router = routers.DefaultRouter()

router.register(
    r'cvs',
    views.EENSettingsViewSet,
    basename='een-cvs',
)

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

Все, что здесь показано, работает, как и ожидалось, но включенные URL-адреса не отображаются в просматриваемом API. Они доступны и работают, но в списке их нет. Я использую drf-spectacular, который правильно подхватывает даже включенные URL-адреса приложений.

Я пробовал несколько разных комбинаций, разный порядок урлов и т.д. - безрезультатно. Что я упускаю из виду? Или это общая особенность DRF, и мне действительно следует хранить все в корневом urls.py - если я хочу получить полноценный API с возможностью просмотра.

Можете ли вы попробовать следующий код один раз? urls.py

from django.contrib import admin
from django.urls import include, path
from rest_framework.routers import DefaultRouter

import core.views
import een.views

router = DefaultRouter()

# Register core routes
router.register(r'core/settings', core.views.SettingsViewSet, basename='settings')
router.register(r'core/organization', core.views.OrgViewSet, basename='org')

# Register een routes
router.register(r'een/cvs', een.views.EENSettingsViewSet, basename='een-cvs')

urlpatterns = [
    path('api/', include(router.urls)),
    path('admin/', admin.site.urls),
    path('', include('rest_framework.urls', namespace='rest_framework')),
    path('api/tokenauth/', authviews.obtain_auth_token),
]
Вернуться на верх