我可以使用以下代码上传单个图像。如果我选择了多张图像,则只会上传所选图像中的最后一张图像。 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 dictmodels.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上传多张图片?
发布评论