Django 如何将文件内容传递给序列化程序?
我是django的新人。 我需要实施两个POST选项;一个来自url参数,另一个来自文件数据 例如,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
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。序列化程序具有相关字段,这可能是原因。修改相关字段后,它将工作:)