Django - Как правильно получить загрузку нескольких изображений через POST?

У меня есть этот view.py и models.py файлы ниже, которые должны поддерживать загрузку нескольких изображений. У меня есть тесты, которые работают и действительно генерируют изображения, но изображения прикрепляются к POST-запросу в формате ByteIO. Я хочу, чтобы эта конечная точка получала POST-запрос от React Native front-end, содержащий изображение, и я не знаю, будет ли оно в формате ByteIO. Я попробовал отправить изображение в байтовом формате, сделав

    with open('./media/test.png', 'rb') as f:
        image = f.read()

Но это по какой-то причине превращает QueryDict, который является request.data, в неизменяемый dict. Как вы можете видеть ниже, это является проблемой, когда я изменяю его. Правильно ли то, как я это реализовал, для получения нескольких загруженных изображений из React Native?

view.py

class PostView(APIView):

    def post(self, request):
        post_body = request.data['body']
        hash_tags_list = extract_hashtags(post_body)
        hash_tags = [HashTag.objects.get_or_create(
            hash_tag=ht)[0].hash_tag for ht in hash_tags_list]
        request.data['hash_tags'] = hash_tags
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid():
            try:
                post_obj = serializer.save()

                if 'images' in request.FILES.keys():
                    for img in request.FILES.getlist('images'):
                        Photo.objects.create(post_id=post_obj, image=img)

            except django.db.utils.InternalError as e:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

models.py

class Post(AbstractBaseModel):
    creator_id = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator_id")
    goal_id = models.ForeignKey(Goal, on_delete=models.CASCADE)
    body = models.CharField(max_length=511, validators=[MinLengthValidator(5)])
    hash_tags = models.ManyToManyField(HashTag)


def directory_path(instance, filename):
    _, extension = os.path.splitext(filename)
    return 'images/user_{0}/{1}'.format(instance.post_id.creator_id.uuid, str(instance.uuid) + extension)


class Photo(AbstractBaseModel):
    post_id = models.ForeignKey(Post, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=directory_path)
Вернуться на верх