我有一个简单的序列化器。
class MySerializer(serializers.Serializer):
file = serializers.FileField()
主要问题是,即使我已将文件提供给序列化程序,它也会引发验证错误。该视图将返回消息,指出数据无效。此行为似乎是错误的。我清楚地传递给serialzier的文件消失了,导致验证错误。
MyView(APIView)类:
permission_classes = ()
parser_classes = (MultiPartParser,)
def post(self, request):
print(request.data)
# <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
serializer = MySerializer(data=request.data)
serializer.is_valid(raise_exception=True)
...
端点响应:
{
"file": [
"This field can not be null."
]
}
这种行为对我来说很奇怪。文档说request.data
同时包含file
和non-file
对象。我们甚至可以在我的print
中看到它。问题是为什么我的serialzier无法使用它?这个文件神奇地消失了。
我在自己的视图中使用此serializser:
class MyView(APIView):
permission_classes = ()
parser_classes = (MultiPartParser,)
def post(self, request):
print(request.data)
# <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
serializer = MySerializer(data=request.data)
serializer.is_valid()
print(serializer.data)
# {'file': None}
通过一点测试,即使将数据传递到包含文件的序列化程序,我仍然看到。但是在检查serializer.data
后,它说file
是None
。
答案 0 :(得分:0)
序列化器数据将通过serializer.validated_data
访问class MyView(APIView):
permission_classes = ()
parser_classes = (MultiPartParser,)
def post(self, request):
print(request.data)
# <QueryDict: {'file': [<InMemoryUploadedFile: some_file.png (image/png)>]}>
serializer = MySerializer(data=request.data)
serializer.is_valid()
print(serializer.validated_data)