drf-nested-routers RuntimeError('未找到父级注册资源')

2024-05-22

我正在尝试利用包 drf-nested-routers 在我的 API 中创建嵌套路由。

我试图遵循文档(https://github.com/alanjds/drf-nested-routers 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)

希望有一个看起来像这样的 URL 模式/api/v1/devices/<device_id>/breadcrumbs/。不幸的是,我上面显示的代码导致了错误RuntimeError('parent registered resource not found')

我似乎无法弄清楚为什么我提供的内容会发生此错误。任何帮助将非常感激。


改变这一行

device_breadcrumbs_router = routers.NestedSimpleRouter(router, r'breadcrumbs', lookup='breadcrumb')

to

device_breadcrumbs_router = routers.NestedSimpleRouter(router, r'devices', lookup='breadcrumb')

来自 DRF 嵌套路由器的文档

router = routers.SimpleRouter()
router.register(r'domains', DomainViewSet)

domains_router = routers.NestedSimpleRouter(router, r'domains', lookup='domain')
domains_router.register(r'nameservers', NameserverViewSet, base_name='domain-nameservers')

请注意如何r"domains"匹配。该错误试图说明它找不到要添加嵌套资源的 url。它正在寻找 /breadcrumbs 但不存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

drf-nested-routers RuntimeError('未找到父级注册资源') 的相关文章

随机推荐