Comment supprimer une collection dans Django Rest Api ?
-
20-12-2019 - |
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'])
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