【问题标题】:Django Rest API: View definition delete querysetDjango Rest API:查看定义删除查询集
【发布时间】:2020-10-30 21:16:02
【问题描述】:

我对在 Django Rest Framework 中创建视图仍然很陌生,我可以制作基本视图,但我仍然不知道定义,所以请在这里帮助我。

我有这个 View 可以获取问题的答案(通过给定的问题 ID)。列表定义完美,但是我想创建一个删除这些结果的 delete_all 函数。你可以在下面看到我的想法。

网址

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')

【问题讨论】:

    标签: mysql django django-rest-framework drf-queryset


    【解决方案1】:

    这在the documentation中都有解释:

    ModelViewSet 类继承自 GenericAPIView,并通过混合各种 mixin 类的行为来包含各种操作的实现。 ModelViewSet 类提供的动作是.list(), .retrieve(), .create(), .update(), .partial_update(), and .destroy()

    所以没有delete_all()。您必须将视图集和路由器告知make it available

    如果您有应可路由的临时方法,则可以使用 @action 装饰器将它们标记为可路由。

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2016-01-10
      • 2020-10-28
      • 2018-10-26
      • 1970-01-01
      • 2015-05-21
      • 2017-08-12
      • 2021-05-29
      • 2014-11-16
      相关资源
      最近更新 更多