我需要捕获以下网址中的网址参数 " /入口/ {PK} / portalProject / {PK}"
以下网址未导致以下视图功能。这有什么不对?
urls.py
router = routers.DefaultRouter()
router.register(r'movies', MoviesViewSet)
router.register(r'project', ClientViewSet)
router.register(r'portal', PortalViewSet)
router.register(r'portal/(?P<portal_pk>\d+)/portalProject/(?P<portalProject_pk>\d+)/$', PortalViewSet, 'portalProject')
router.register(r'portalProject', PortalProjectViewSet)
views.py
class PortalViewSet(viewsets.ModelViewSet):
...
@detail_route(methods=['post','get'])
def portalProject(self, request, pk=None):
print "in here"
if request.method == 'post':
#some code
serializer = PortalProjectSerializer(data=request.data)
if serializer.is_valid():
print "valid"
serializer.save()
return Response(status=status.HTTP_200_OK)
else:
print serializer.errors
return Response(status=status.HTTP_400_BAD_REQUEST)
else:
#some code
return Response(status=status.HTTP_200_OK)
...
答案 0 :(得分:1)
您实际上并未在DefaultRouter
中声明特定路线。 router
负责为您创建所有子网址。只需执行router.register(r'portal', PortalViewSet)
即可:
@list_route
装饰方法@detail_route
装饰方法因此,除非您想要创建自定义路由器,否则您必须将您的网址格式更改为/portal/{pk}/portalProject/?id={pk}
此外,如果您仍然portalProject
pk
请求/portal/{pk}
,则无需在pk
下嵌套网址。 portalProject
的{{1}}已足够具体。您已经有了portalProject
的路由,因此您实际上可以通过两种方式访问相同的数据,其中一种方法更加复杂,没有充分的理由。
但是,我相信这就是你要找的东西:
https://github.com/alanjds/drf-nested-routers
或https://chibisov.github.io/drf-extensions/docs/#nested-routes