我正在尝试利用包 drf-nested-routers 在我的 API 中创建嵌套路由。
我试图跟随文档(https://github.com/alanjds/drf-nested-routers)以及通读多个 Stackoverflow 线程希望找出这个问题。
我想创建一个 NestedSimpleRouter。这是我目前在我的 routers.py 文件中的内容:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework_nested import routers
from api_v1.viewsets import DeviceViewSet, BreadcrumbViewSet
router = DefaultRouter()
router.register(r'devices', DeviceViewSet, base_name='devices')
device_breadcrumbs_router = routers.NestedSimpleRouter(router, r'breadcrumbs', lookup='breadcrumb')
device_breadcrumbs_router.register(r'breadcrumbs', BreadcrumbViewSet, base_name='breadcrumbs')
api_url_patterns = [
path('', include(router.urls)),
path('', include(device_breadcrumbs_router.urls)),
]
然后我将其包含api_url_patterns
在我的 urls.py 文件中:
from django.contrib import admin
from django.urls import path, include
from .routers import api_url_patterns
urlpatterns = [
path('api/v1/', include(api_url_patterns)),
path('admin/', admin.site.urls),
]
这是我的视图集:
class DeviceViewSet(viewsets.ModelViewSet):
serializer_class = DeviceSerializer
def get_queryset(self):
return Device.objects.all()
class BreadcrumbViewSet(viewsets.ModelViewSet):
serializer_class = BreadcrumbSerializer
def get_queryset(self):
device_id = self.kwargs.get('device', None)
return Breadcrumb.objects.filter(device_id=device_id)
希望有一个看起来像/api/v1/devices/<device_id>/breadcrumbs/
. 不幸的是,我上面显示的代码导致错误RuntimeError('parent registered resource not found')
我似乎无法弄清楚为什么我提供的会发生此错误。任何帮助将非常感激。