Как создать мини-фотографию во время создания фотографии?
У меня есть сервис загрузки фотографий на 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)