0

Mon views.py d'application django est comme ci-dessous,override créer méthode dans django repos génériques 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 

Ici, dans ce qui précède si je remplacer la fonction créer le retour échoue avec l'erreur suivante, même si je ne pas faire quelque chose et il suffit d'écrire le transmettre échoue,

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

Répondre

1

Le retour doit être instanceofResponse .Vous pouvez retourner parent réponse de classe, après votre 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) 

ou bien si vous ne voulez pas la réponse parent, puis revenir tout simplement un exemple Response

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

Votre vue doit retourner un objet Response, comme dit dans votre AssertionError stacktrace.

Dans votre cas, vous pouvez essayer de retourner un Response vide afin de tester votre vue et votre 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) 

En règle générale, vous voulez retourner votre serializer.validated_data à la fin, de sorte que cette ligne sera probablement regarder comme ceci:

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