Django Rest API:查看定义删除查询集



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

我有一个视图,它可以得到一个问题的答案(通过给定的问题id(。列表定义非常有效,但是我想创建一个delete_all函数来删除这些结果。你可以在下面看到我的想法。

URL

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

这一切都在文档中进行了解释:

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

所以没有delete_all()。您必须告诉视图集和路由器才能使其可用:

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

最新更新