Django 如何将文件内容传递给序列化程序?

Django 如何将文件内容传递给序列化程序?,django,django-rest-framework,Django,Django Rest Framework,我是django的新人。 我需要实施两个POST选项;一个来自url参数,另一个来自文件数据 例如,curl-X POST localhost:8000/api/test?key=value 或者curl-xpost-F“file=@myfile.json”localhost:8000/api/test 我用下面的方法测试,但失败了 class TestEntryView(ListCreateAPIView): queryset = TestEntry.objects.all().ord

我是django的新人。 我需要实施两个POST选项;一个来自url参数,另一个来自文件数据

例如,
curl-X POST localhost:8000/api/test?key=value
或者
curl-xpost-F“file=@myfile.json”localhost:8000/api/test

我用下面的方法测试,但失败了

class TestEntryView(ListCreateAPIView):
    queryset = TestEntry.objects.all().order_by('-id')
    parser_classes = (MultiPartParser, FormParser,)
    serializer_class = TestEntrySerializer

    def perform_create(self, serializer):
        if self.request.FILES.get('file'):
            file_obj = request.FILES['file']
            filename = '/api/mytest/.temp/testfile'
            with open(filename, 'wb+') as temp_file:
                for chunk in file_obj.chunks():
                    temp_file.write(chunk)
            with open(filename, 'r') as temp_file:
                data = json.load(temp_file)
                serializer.save(**data)
        serializer.save()


=>
perform\u create()
由于验证字段失败而未被调用。是否有推荐的方法用于此目的?

“由于验证字段失败”:那么哪些字段未通过验证,为什么不在序列化程序中更改验证?另外请注意,
文件\u obj
是一个
上传文件
,因此您不必先保存它来读取它。它支持
open()
read()
。调用
json.loads()
时,您正在将其完全加载到内存中,因此使用
chunks()
不是很有用。谢谢@dirkgroten。序列化程序具有相关字段,这可能是原因。修改相关字段后,它可以工作:)“由于验证字段失败”:那么哪些字段验证失败,为什么不在序列化程序中更改验证?还要注意,
file_obj
是一个
uploaded文件
,因此您不必先保存它来读取它。它支持
open()
read()
。调用
json.loads()
时,您正在将其完全加载到内存中,因此使用
chunks()
不是很有用。谢谢@dirkgroten。序列化程序具有相关字段,这可能是原因。修改相关字段后,它将工作:)