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的主要内容,如果未能解决你的问题,请参考以下文章
从 django rest 框架中的序列化程序发送自定义错误响应?
如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?
raise PermissionDenied 中的自定义消息在 Django rest 中不起作用