首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drf嵌套路由器RuntimeError(‘找不到父注册资源’)

drf嵌套路由器RuntimeError(‘找不到父注册资源’)
EN

Stack Overflow用户
提问于 2019-03-17 07:16:59
回答 1查看 1.2K关注 0票数 6

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

我尝试在阅读文档(https://github.com/alanjds/drf-nested-routers)的同时阅读多个Stackoverflow线程,希望能弄清楚这个问题。

我想创建一个NestedSimpleRouter。下面是我到目前为止在routers.py文件中拥有的内容:

代码语言:javascript
复制
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)),
]

然后在我的urls.py文件中包含这个api_url_patterns

代码语言:javascript
复制
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),
]

下面是我的视图集:

代码语言:javascript
复制
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')

我似乎不明白为什么这个错误会发生在我提供的代码中。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-09 07:54:10

更改此行

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

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

从DRF嵌套路由器的文档

代码语言:javascript
复制
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,但它并不存在。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55202454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档