Django rest框架中的自定义kwarg

Posted

技术标签:

【中文标题】Django rest框架中的自定义kwarg【英文标题】:Custom kwarg in Django rest framework 【发布时间】:2021-05-30 14:12:02 【问题描述】:

今天我有 2 个网址

router.register(r'question_type', QuestionTypeViewSet)
router.register(r'question', QuestionViewSet)

但我需要这样的东西

router.register(r'question_type', QuestionTypeViewSet)
router.register(r'question_type/question_type_pk/question', QuestionViewSet)

我的观点集

class QuestionTypeViewSet(viewsets.ModelViewSet):

   serializer_class = QuestionTypeSerializer
   queryset = QuestionType.objects.all()

我想用 QuestionViewSet 做什么

class QuestionViewSet(viewsets.ModelViewSet):

   serializer_class = QuestionSerializer

   def get_queryset(self):

       queryset = Question.objects.filter(
           question_type__id=self.kwargs['question_type_id'])

       return queryset

我应该如何制作问题的网址?

【问题讨论】:

这个包可能有帮助吗? github.com/alanjds/drf-nested-routers 这项工作适合我 【参考方案1】:

按照文档中的 session,您可以通过向 QuestionViewSet 视图集添加额外操作来实现此目的。

这里的文档是如何实现 r'question_type/pk/question'

from rest_framework.decorators import action

…………

class QuestionViewSet(viewsets.ModelViewSet):
    """ your current code """
    
    @action(detail=True, methods=['post'])
    def question(self, request, pk=True):
        serializer = YourQuestionSerializer(data=request.data)
        if serializer.is_valid(): 
            """ your logic here """

【讨论】:

以上是关于Django rest框架中的自定义kwarg的主要内容,如果未能解决你的问题,请参考以下文章

DRF(Django REST Framework)框架

从 django rest 框架中的序列化程序发送自定义错误响应?

如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?

raise PermissionDenied 中的自定义消息在 Django rest 中不起作用

Django Rest Framework 序列化程序中的自定义错误消息

python-django rest framework框架之解析器