在DRF3中创建多个模型实例

时间:2015-05-20 00:44:13

标签: django django-models django-views django-rest-framework

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

1 个答案:

答案 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