Mysql Django Rest API:视图定义删除查询集

Mysql Django Rest API:视图定义删除查询集,mysql,django,django-rest-framework,drf-queryset,Mysql,Django,Django Rest Framework,Drf Queryset,我对在Django Rest框架中创建视图还是相当陌生的,我可以创建基本视图,但我仍然对定义一无所知,所以请在这里帮助我 我有这样一个观点,它可以得到一个问题的答案(通过给定的问题id)。列表定义工作得很好,但是我想创建一个delete_all函数来删除这些结果。你可以在下面看到我的想法 网址 看法 这些都在以下章节中进行了解释: ModelViewSet类继承自GenericAPIView,通过混合各种mixin类的行为,包括各种操作的实现。 ModelViewSet类提供的操作有.list(

我对在Django Rest框架中创建视图还是相当陌生的,我可以创建基本视图,但我仍然对定义一无所知,所以请在这里帮助我

我有这样一个观点,它可以得到一个问题的答案(通过给定的问题id)。列表定义工作得很好,但是我想创建一个delete_all函数来删除这些结果。你可以在下面看到我的想法

网址

看法

这些都在以下章节中进行了解释:

ModelViewSet类继承自GenericAPIView,通过混合各种mixin类的行为,包括各种操作的实现。 ModelViewSet类提供的操作有
.list()、.retrieve()、.create()、.update()、.partial_update()和.destroy()

因此没有
delete_all()
。您必须告诉视图集和路由器:

如果您有可路由的特殊方法,可以使用@action decorator将它们标记为可路由的

router.register('manager/course/question/answers', QuestionAnswerView)


http://.../manager/course/question/answers/5 works.
http://.../manager/course/question/answers/delete_all/5 does not work.
class QuestionAnswerView(viewsets.ModelViewSet):
    queryset = QuestionAnswer.objects.all()
    serializer_class = QuestionAnswerSerializer

    # works
    def list(self, request):
        queryset = QuestionAnswer.objects.all()
        if request.query_params:
            question_id = request.query_params['question_id']
            queryset = QuestionAnswer.objects.filter(question=question_id)
        serializer = QuestionAnswerSerializer(queryset, many=True)
        return Response(serializer.data)
    
    # does not work
    def delete_all(self, request):
        if request.query_params:
            question_id = request.query_params['question_id']
            queryset = QuestionAnswer.objects.filter(question=question_id)
            queryset.delete()
        return Response('success')