Ich habe versucht, eine einzige ManuscriptItem Instanz mit Postman löschen, um meine API-Anfragen auf gegen die unten Ansicht ausführen:Delete-Methode auf Django Rastrahmen ModelViewSet
class ManuscriptViewSet(viewsets.ModelViewSet):
"""Handles creating, reading and updating items."""
authentication_classes = (TokenAuthentication,)
serializer_class = serializers.ManuscriptItemSerializer
permission_classes = (permissions.PostOwnManuscript, IsAuthenticated,)
def perform_create(self, serializer):
"""Sets the user profile to the logged in user."""
serializer.save(author=self.request.user)
def get_queryset(self):
"""
This view should return a list of all the manuscripts
for the currently authenticated user.
"""
user = self.request.user
return models.ManuscriptItem.objects.filter(author=user)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_destroy(self, instance):
instance.delete()
Die zerstören und führen zerstören Funktionen sind, was ich versucht habe ohne Erfolg. Dies ist, was es gibt, wenn ich versucht:
{ "detail": "Method \"DELETE\" not allowed." }
Dies ist, wie meine URLs momentan registriert sind:
router = DefaultRouter()
router.register('manuscripts', views.ManuscriptViewSet, base_name="manuscripts") # auto basename for models
router.register('manuscriptlibrary', views.ManuscriptLibraryViewSet, base_name="manuscript_library")
router.register('manuscriptsettings', views.ManuscriptSettingsViewSet)
urlpatterns = [
url(r'', include(router.urls))
]
Ich bin ich die ModelViewSet modifizieren falsch machen brauche ich einen anderen Ansatz zu verwenden, da die Art von ModelViewSet? Ich habe erwartet, dass es auf Postman funktioniert, wenn ich einen Authorized Benutzer verwendet habe, um eine ManuscriptItem-Instanz zu löschen. In den Dokumenten wurde angegeben, dass die Destroy() -Methode verwendet werden kann.
Zusätzliche Informationen
Die URL wird verwendet:
Die Modellinstanz aus gelöscht werden:
class ManuscriptItem(models.Model):
"""Represents a single manuscript's content"""
author = models.ForeignKey('accounts_api.UserProfile', on_delete=models.CASCADE)
title = models.CharField(max_length=255)
content = models.CharField(max_length=99999999)
def __str__(self):
"""Django uses when it needs to convert the object to a string"""
return str(self.id)
Die Art, wie ich auf Postbote löschen Anforderungen zu senden versucht haben, mit json:
{ "manuscript": 7, }
Ergebnisse: Methode nicht erlaubt löschen
{ "id": 7, "author": 5, "title": "niceone", "content": "niceone" }
Ergebnisse: Methode löschen
Weitere Fragen/Info nicht erlaubt:
Muss ich den Router-Register nicht mit angeben müssen ein Pk? Ich habe versucht, dies aber nicht funktioniert hat entweder:
router.register('manuscripts/{pk}/$', views.ManuscriptViewSet, base_name="manuscript_detail")
Postman sagt:
Allow →GET, POST, HEAD, OPTIONS
Ehrfürchtig. Es funktioniert jetzt! Danke für den letzten Schritt! – NewScientists
@NewScientists Gern geschehen! – wencakisa
Ich versuche es, aber ich erhalte diesen Fehler, wenn ich url mit as_view() 'TypeError registrieren: Das \' actions \ 'Argument muss beim Aufruf von \' .as_view() \ 'auf einem ViewSet angegeben werden. Zum Beispiel \ '.as_view ({' get ':' list '}) \ "" Weißt du warum? –