Django остальные URL-маршрутизаторы в представлении классов - PullRequest
0 голосов
/ 20 сентября 2019

Я хотел бы получить подробную информацию о моих подмодулях на маршруте с несколькими параметрами.Мои существующие маршруты сейчас:

Я хотел бы сделать 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)

Сериализаторы.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)),
]

1 Ответ

1 голос
/ 20 сентября 2019

Вы можете использовать drf-nested-routers.

Вам потребуется включить дополнительный NestedRouter в свой urls.py, например:

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 
...