如何使用DJango Rest Framework上传多张图片?

编程入门 行业动态 更新时间:2024-10-20 05:33:26
本文介绍了如何使用DJango Rest Framework上传多张图片?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我可以使用以下代码上传单个图像。如果我选择了多张图像,则只会上传所选图像中的最后一张图像。 models.py

I am able to upload a single image with the following code. If I select multiple images then only the last image among the selected image is getting uploaded. models.py

class Image(models.Model): property_id = models.ForeignKey( 'properties.Address', null=False, default=1, on_delete=models.CASCADE ) image = models.ImageField(upload_to=directory_path)

serializers.py

serializers.py

class ImageSerializer(serializers.ModelSerializer): class Meta: model = Image fields = ( 'property_id', 'image' )

views.py

views.py

class ImageView(APIView): parser_classes = (MultiPartParser, FormParser) def get(self, request): all_images = Image.objects.all() serializer = ImageSerializer(all_images, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request, *args, **kwargs): file_serializer = ImageSerializer(data=request.data) if file_serializer.is_valid(): file_serializer.save() return Response(file_serializer.data, status=status.HTTP_201_CREATED) else: return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我对Django有点陌生。我想循环遍历request.data中收到的图像数组。有人可以告诉我该怎么做吗?

I am a little new to Django. I want to loop over my array of images which is received in the request.data Can anyone tell me how to do it?

推荐答案

因此,我终于找到了一种以自己的方式解决问题的方法,因为我找不到以DRF方式进行处理的任何方法。我希望这个答案对Django社区有所帮助。我保持模型和序列化器相同,更改视图以遍历每个图像并使用序列化器保存。

So I finally got a workaround in my own way falling back to the basics as I didn't find any way to do it in a DRF way. I hope this answer is helpful to the Django community. I kept my model and serializers same changing the views to iterate over every image and save it using the serializer.

views.py

class ImageView(APIView): parser_classes = (MultiPartParser, FormParser) def get(self, request): all_images = Image.objects.all() serializer = ImageSerializer(all_images, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request, *args, **kwargs): property_id = request.data['property_id'] # converts querydict to original dict images = dict((request.data).lists())['image'] flag = 1 arr = [] for img_name in images: modified_data = modify_input_for_multiple_files(property_id, img_name) file_serializer = ImageSerializer(data=modified_data) if file_serializer.is_valid(): file_serializer.save() arr.append(file_serializer.data) else: flag = 0 if flag == 1: return Response(arr, status=status.HTTP_201_CREATED) else: return Response(arr, status=status.HTTP_400_BAD_REQUEST)

helpers.py

def modify_input_for_multiple_files(property_id, image): dict = {} dict['property_id'] = property_id dict['image'] = image return dict

models.py

class Image(models.Model): property_id = models.ForeignKey( 'properties.Address', null=False, default=1, on_delete=models.CASCADE ) image = models.ImageField(upload_to=directory_path)

serializers.py

class ImageSerializer(serializers.ModelSerializer): class Meta: model = Image fields = ( 'property_id', 'image' )

请求以querydict的形式出现。该行 images = dict((request.data).lists())['image'] 将查询dict转换为python dict,然后循环遍历图片 键。

The request comes in the form of querydict. The line images = dict((request.data).lists())['image'] coverts query dict to python dict and then looping over the array under the 'image' key.

邮递员要求如下:

The postman request looks like below:

更多推荐

如何使用DJango Rest Framework上传多张图片?

本文发布于:2023-11-26 02:52:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1632346.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   多张   上传   图片   Framework

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!