0

CreateAPIView、上記でここオーバーライドしても、Djangoのアプリの私のviews.pyは以下の通りです

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 

私はリターンが次のエラーで失敗しているの作成機能をオーバーライドする場合はメソッドを作成しますIどんな事をして、ちょうどそれが失敗しているパス書き込み、

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

答えて

1

いないリターンがinstanceofResponseする必要があります。あなたはあなたのstuff

後、 parentクラスの応答を返すことができます
def create(self, request, *args, **kwargs): 
    ''' I wanted to do some stuff with serializer.data here ''' 
    return super(MemberCreate, self).create(request, *args, **kwargs) 

または他のあなたが親の応答をしたくない場合は、単にResponseインスタンスを返し

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

あなたAssertionErrorスタックトレースに言ったようにあなたのビューは、Responseオブジェクトを返す必要があります。あなたのケースでは

、あなたはあなたのビューと一般的にあなたの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) 

をテストするために、空Responseを返すようにしようとすることができ、あなたは最終的にあなたのserializer.validated_dataを返すようにしたいので、この行はおそらくになりますこのように:

return Response(serializer.validated_data, status=status.HTTP_201_CREATED) 
関連する問題