在 DRF3 中创建多个模型实例
Creating multiple model instances in DRF3
1) 我想用一个 API 调用创建多个模型实例,就像这里问的那样:How do I create multiple model instances with Django Rest Framework?
我尝试了 link 中命名的解决方案,但没有成功。
我想在一次 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 提到:"To serialize a queryset or list of objects instead of a single object instance, you should pass the many=True flag when instantiating the serializer. You can then pass a queryset or list of objects to be serialized." => 应该是可能的...
2) 使用 django-rest-framework-bulk 是否更好? https://github.com/miki725/django-rest-framework-bulk
从 Django REST framework 3.1 开始,无法使用表单数据提交多个值。这是因为没有标准化的方法来发送数据列表 与关联 ,这是处理 ListSerializer
.
所必需的
有计划实施 HTML JSON forms 支持,这最终将允许它与标准一起使用。这是 Django REST framework 3.2 的里程碑,但尚未完成。
在此之前,建议使用JSON代替表单数据。 JSON 支持批量创建和更新,. The alternative is to use django-rest-framework-bulk 也可以。
要使用 JSON 上传文件,您需要对文件进行 base64 编码并使用 a custom Base64ImageField
to allow them to be uploaded. This is because JSON does not natively support file uploads。
1) 我想用一个 API 调用创建多个模型实例,就像这里问的那样:How do I create multiple model instances with Django Rest Framework? 我尝试了 link 中命名的解决方案,但没有成功。
我想在一次 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 提到:"To serialize a queryset or list of objects instead of a single object instance, you should pass the many=True flag when instantiating the serializer. You can then pass a queryset or list of objects to be serialized." => 应该是可能的...
2) 使用 django-rest-framework-bulk 是否更好? https://github.com/miki725/django-rest-framework-bulk
从 Django REST framework 3.1 开始,无法使用表单数据提交多个值。这是因为没有标准化的方法来发送数据列表 与关联 ,这是处理 ListSerializer
.
有计划实施 HTML JSON forms 支持,这最终将允许它与标准一起使用。这是 Django REST framework 3.2 的里程碑,但尚未完成。
在此之前,建议使用JSON代替表单数据。 JSON 支持批量创建和更新,
要使用 JSON 上传文件,您需要对文件进行 base64 编码并使用 a custom Base64ImageField
to allow them to be uploaded. This is because JSON does not natively support file uploads。