django rest_frameworkエラーメッセージAssertionError:When a serializer is passed a`data`keyword

1602 ワード

今日はdjangoのrestを勉強していますframework仕様でAssertionError:When a serializer is passed a`data`keyword argument you must call`.is_valid()` before attempting to access the serialized `.data` representation. エラーメッセージ。解決策を記録します。


エラーコード:
class BookModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Books
        fields = "__all__"


class BooksView(APIView):
    def get(self, request):
        book_list = Books.objects.all()
        ret = BookModelSerializer(book_list, many=True)
        return Response(ret.data)

    def post(self, request):
        print(request.data)
        bs = BookModelSerializer(data=request.data)
        print(bs.data)
        if bs.is_valid():
            return Response(bs.data)

        else:
            return Response(bs.errors)

エラーの原因:
まず、シーケンス化されたデータをオブジェクトに逆シーケンス化する場合、シーケンス化クラスのパラメータにdata=シーケンス化されたデータを指定します.
オブジェクトを呼び出します.dataの場合は、先に実行する.is_valid()メソッドを呼び出すには
だから次のように修正して間違いを報告しません.
class BookModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Books
        fields = "__all__"


class BooksView(APIView):
    def get(self, request):
        book_list = Books.objects.all()
        ret = BookModelSerializer(book_list, many=True)
        return Response(ret.data)

    def post(self, request):
        print(request.data)
        bs = BookModelSerializer(data=request.data)
        if bs.is_valid():
            print(bs.data)
            return Response(bs.data)

        else:
            return Response(bs.errors)