gpt4 book ai didi

django - 如何使用 DJango Rest Framework 上传多个图像?

转载 作者:行者123 更新时间:2023-12-04 15:06:21 26 4
gpt4 key购买 nike

我可以使用以下代码上传单个图像。如果我选择多张图片,那么只会上传所选图片中的最后一张图片。
模型.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)

序列化程序.py
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = (
'property_id',
'image'
)

View .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 中收到的图像数组 谁能告诉我怎么做?

最佳答案

所以我终于以自己的方式找到了一个回到基础的解决方法,因为我没有找到任何方法以 DRF 方式做到这一点。我希望这个答案对 Django 社区有所帮助。我保持我的模型和序列化器相同,更改 View 以迭代每个图像并使用序列化器保存它。

View .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

模型.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,然后循环遍历 'image' 下的数组 key 。

postman 请求如下所示 :
enter image description here
Posts images to the media folder of file system

关于django - 如何使用 DJango Rest Framework 上传多个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com