我想在带有多个参数的路由上获取子模块的详细信息。 我现在的现有路线是:
http://localhost:8000/api/module/1/-获取所有模块和连接的子模块
我想做http://localhost:8000/api/module/1/submodules/1,它将获取子模块的详细信息。我应该如何使用基于类的视图来做到这一点?
下面是我现有的代码:
Views.py
class CourseModuleViewSet(viewsets.ModelViewSet):
queryset = CourseModule.objects.all()
serializer_class = CourseModuleSerializer
def retrieve(self, request, pk=None):
coursemodule = CourseModule.objects.get(id=pk)
submodule = SubModule.objects.filter(submodule_module_id=pk)
serializer = SubModuleSerializer(submodule, many=True)
response = {'message': 'Sucess!',
'result': serializer.data}
return Response(serializer.data, status=status.HTTP_200_OK)
Serializers.py
class CourseModuleSerializer(serializers.ModelSerializer):
class Meta:
model = CourseModule
fields = ['class_id', 'coursemodule_title', 'coursemodule_date_created',
'coursemodule_last_modified', 'coursemodule_created_by']
class SubModuleSerializer(serializers.ModelSerializer):
submodule_module_id = CourseModuleSerializer(many=False)
class Meta:
model = SubModule
fields = ['submodule_module_id','submodule_title', 'submodule_date_created', 'submodule_last_modified',
'submodule_created_by']
urls.py
router = routers.DefaultRouter()
router.register('module', CourseModuleViewSet)
urlpatterns = [
path('', include(router.urls)),
]
答案 0 :(得分:1)
您可以使用drf-nested-routers.
您需要在urls.py中添加一个额外的NestedRouter,如下所示:
router = routers.DefaultRouter()
router.register(r'module', CourseModuleViewSet)
sub_modules_router = routers.NestedSimpleRouter(router, r'module', lookup='module')
sub_modules_router.register(r'submodules', SubModuleViewSet, base_name='module-submodules')
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^', include(sub_modules_router.urls)),
)
然后您可以创建一个SubModuleViewSet:
class SubModuleViewSet(viewsets.ModelViewSet):
def get_queryset(self):
return SubModule(submodule_module_id =self.kwargs['module_pk'])
serializer_class = SubModuleSerializer