0

Meine views.py von django app wie unten sind,Überschreibung create-Methode in django Generika ruht CreateAPIView

class MemberCreate(generics.CreateAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (permissions.IsAdminUser,) 

    def create(self, serializer): 
     ''' I wanted to do some stuff with serializer.data here ''' 
     pass 

Hier in diesem Befehl, wenn ich die erstellen Funktion überschreiben, die Rückkehr ist mit folgendem Fehler versagt, auch wenn ich keine Sache tun und schreiben sie einfach passieren es versagt,

AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>` 

Antwort

1

Die Rückkehr instanceofResponse sein sollte .Sie können parent Klasse Antwort zurück, nach dem stuff

def create(self, request, *args, **kwargs): 
    ''' I wanted to do some stuff with serializer.data here ''' 
    return super(MemberCreate, self).create(request, *args, **kwargs) 

oder auch wenn Sie die übergeordnete Antwort nicht wollen, dann schicken Sie einfach eine Response Instanz

def create(self, request, *args, **kwargs): 
    ''' I wanted to do some stuff with serializer.data here ''' 
    return Response(status=204) 
1

Ihre Ansicht ein Response Objekt zurückgeben sollte, wie in Ihrer AssertionError stacktrace sagte.

In Ihrem Fall können Sie versuchen, eine leere Response zurückzukehren, um Ihre Ansicht und Ihre serializer.data

from rest_framework.response import Response 
from rest_framework import status 


class MemberCreate(generics.CreateAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (permissions.IsAdminUser,) 

    def create(self, request, *args, **kwargs): 
     serializer = self.serializer_class(...) 
     data = serializer.data 

     # ... 

     return Response(status=status.HTTP_204_NO_CONTENT) 

Normalerweise möchten Sie Ihre serializer.validated_data am Ende zurückkehren, zu testen, so dass diese Linie wird wahrscheinlich aussehen wie folgt:

return Response(serializer.validated_data, status=status.HTTP_201_CREATED) 
Verwandte Themen