Question

J'essaie depuis un moment maintenant de faire fonctionner 'DELETE' lors de la lecture d'une collection dans Django Api View.J'utilise 'ListCreateAPIView' et cela ne fournit que des gestionnaires de méthodes get et post.Est-ce que quelqu'un sait comment réparer ceci?

Mon avis:

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'])
Était-ce utile?

La solution

résolu en ajoutant:

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)

Autres conseils

Vous pouvez utiliser un 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)

Le self.destroy méthode fournie par le DestroyModelMixin gérera la suppression de l'objet, augmentera correctement le pre_delete et post_delete signaux, et renverra le 204 NO CONTENT statut.

def delete(self, request, pk, format=None):
           event = self.get_object(pk)
           event.delete()
           return Response("Object Deleted")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top