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)
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)
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)