1)我想通过一次API调用创建多个模型实例,如下所示:How do I create multiple model instances with Django Rest Framework? 我尝试了链接中指定的解决方案,但没有成功。
我正在尝试在一次API调用中上传多个文件。 结果:文件被上传(只有一次我覆盖perform_create)但是只创建了一个实例(如果我发送两个文件,则只创建后者作为实例)。
我的代码:
class FileUploadSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
many = kwargs.pop('many', True)
super(FileUploadSerializer, self).__init__(many=many, *args, **kwargs)
class Meta:
model = FileUpload
read_only_fields = ('created', 'datafile', 'owner')
class FileUploadViewSet(viewsets.ModelViewSet):
queryset = FileUpload.objects.all()
serializer_class = FileUploadSerializer
parser_classes = (MultiPartParser, FormParser, )
def perform_create(self, serializer):
file_list = self.request.data.getlist('file')
for item in file_list:
serializer.save(file=item)
我是否在正确的轨道上?文档http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-multiple-objects提到:"要序列化查询集或对象列表而不是单个对象实例,应在实例化序列化程序时传递many = True标志。然后,您可以传递要序列化的查询集或对象列表。" =>它应该是可能的......
2)为此使用django-rest-framework-bulk是否更好? https://github.com/miki725/django-rest-framework-bulk
答案 0 :(得分:1)
从Django REST框架3.1开始,无法使用表单数据提交多个值。这是因为没有标准化的方式来发送带有关联的数据列表,这是处理ListSerializer
所必需的。
有计划实施HTML JSON forms支持,这最终会允许它与标准一起使用。这是Django REST框架3.2的里程碑,但还没有完成。
在此之前,建议使用JSON而不是表单数据。批量创建和更新支持JSON and you can read about how to impelement it here。替代方案是use django-rest-framework-bulk,它可以做同样的事情。
要使用JSON上传文件,您需要对文件进行base64编码,然后使用a custom Base64ImageField
允许上传文件。这是因为JSON does not natively support file uploads。