Как создать мини-фотографию во время создания фотографии?

У меня есть сервис загрузки фотографий на django. Когда я добавляю фотографию, я хочу, чтобы он добавлял еще одну фотографию с 50% разделением. Если я помещаю это в pre_save на моем сервисе сохранения фотографий, он не может найти фотографию (потому что ее нет на сервере) Если я добавляю это в post_save, он зацикливается и добавляет неограниченное количество фотографий

когда я добавляю фото (почтальон или др.) Как можно сохранить небольшое фото за раз?

вот моя модель

class UserPhoto(General, Status):
    user = models.ForeignKey(UserBase, on_delete=models.CASCADE, verbose_name="User Id", related_name='UserPhoto_user',
                             null=True, blank=True)
    link = models.ImageField(blank=True, null=True)
    order = models.IntegerField(null=True, blank=True)
    mini_link = models.ImageField(upload_to='mini_photos', blank=True, null=True)

    class Meta:
        db_table = 'user_photos'

моя точка зрения

class UserPhoto(APIView):
    def get_object(self, pk):
        try:
            return Photo.objects.get(user__user__pk=pk)
        except Exception as e:
            return e

    def get(self, request):
        try:
            photo = self.get_object(request.user.pk)
            serializer = UserPhotoSerializer(photo)
            return Response(serializer.data)
        except Exception as e:
            print(e)

    def post(self, request):
        serializer = UserPhotoSerializer(data=request.data, context={'request': request})
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def put(self, request):
        photo = self.get_object(request.user.pk)
        serializer = UserPhotoSerializer(photo, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

мой сериализатор

class UserPhotoSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserPhoto
        fields = '__all__'

    def create(self, validated_data):
        validated_data["user"] = self.context['request'].user.User_userbase
        return UserPhoto.objects.create(**validated_data)

мой сигнал

@receiver(pre_save, sender=UserPhoto)
    def create_mini_photo(sender, instance=None, created=False, **kwargs):
    blob = BytesIO()
    path = instance.link.path
    image = Image.open(path)
    width, height = image.size
    resized_image = image.resize((int(width / 2), int(height / 2)))
    resized_image = resized_image.convert('RGB')
    resized_image.save(blob, 'JPEG')
    instance.mini_link.save(str(instance.link), File(blob), save=False) 
Вернуться на верх