如何在Django Rest Api中删除集合?

3 投票
3 回答
6149 浏览
提问于 2025-04-18 08:22

我已经尝试了一段时间,希望在Django的Api视图中使用'删除'功能来处理一个集合。不过,我一直在用'ListCreateAPIView',这个只提供了获取和添加的方法。有没有人知道该怎么解决这个问题?

我的视图:

class NotepadDetail(generics.ListCreateAPIView):
    model = Session
    serializer_class = SessionSerializer

    def get_queryset(self):
        user=self.request.user
        notepad = self.kwargs['notepad_pk']
        return Session.objects.filter(user=user, notepad=notepad)

    def pre_save(self, obj):
        obj.user = self.request.user
        obj.notepad = get_object_or_404(Notepad, user=self.request.user, pk=self.kwargs['notepad_pk'])

3 个回答

0
def delete(self, request, pk, format=None):
           event = self.get_object(pk)
           event.delete()
           return Response("Object Deleted")

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

2

你可以使用一个叫做 DestroyModelMixin 的东西:

class NotepadDetail(generics.DestroyModelMixin,
                    generics.ListCreateAPIView):
    model = Session
    serializer_class = SessionSerializer

    def get_queryset(self):
        user=self.request.user
        notepad = self.kwargs['notepad_pk']
        return Session.objects.filter(user=user, notepad=notepad)

    def pre_save(self, obj):
        obj.user = self.request.user
        obj.notepad = get_object_or_404(Notepad, user=self.request.user, pk=self.kwargs['notepad_pk'])

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

这个 DestroyModelMixin 提供了一个叫 self.destroy 的方法,它可以帮你删除对象。这个方法会正确地触发一些信号,比如 pre_deletepost_delete,而且它会返回一个 204 NO CONTENT 的状态,表示删除成功但没有内容返回。

4

我通过添加以下内容解决了这个问题:

def get_object(self, notepad_pk):
    try:
        return Notepad.objects.get(user=self.request.user, pk=notepad_pk)
    except Notepad.DoesNotExist:
        raise Http404

def delete(self, request, notepad_pk, format=None):
    object = self.get_object(notepad_pk)
    object.delete()
    return Response(status=status.HTTP_204_NO_CONTENT)

撰写回答