Как обрабатывать создание, обновление и удаление изображений с помощью сигналов Django?

У меня есть эти модели, я хочу изменить название фотографий в этом шаблоне (ProductName-ImageId.jpg). Мне нужна помощь в изменении Имени файла, в Обновлении и удалении? является ли это лучшей практикой для этого?

модели:

class Product(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50, null=False, blank=False)
    describtion = models.TextField()
    price = models.FloatField()
    inventory = models.PositiveIntegerField()
    created_time = models.DateTimeField(auto_now_add=True)
    last_updated_time = models.DateTimeField(auto_now=True)
    def __str__(self) -> str:
        return self.name

    def get_absolute_url(self)->str:
        return reverse("shop:product", kwargs={"pk": self.pk})

    @property
    def photos(self):
        return ProductImage.objects.filter(product=self)

    @property
    def base_photo(self):
        return self.photos.first().image


class ProductImage(models.Model):
    id = models.AutoField(primary_key=True)
    image = models.ImageField(upload_to="products/photos")
    product = models.ForeignKey(Product, on_delete=models.CASCADE)

    def __str__(self) -> str:
        return self.product.name

сигналы:

from django.db.models.signals import post_delete , post_save 
from django.dispatch import receiver
from .models import ProductImage
import os 
from pathlib import Path
from django.conf import settings 


# This Work On Delete 
@receiver(post_delete, sender=ProductImage)
def my_handler(sender,instance:ProductImage, **kwargs):
    # Delete the Image after delete the Entry 
    Path(instance.image.path).unlink()



@receiver(post_save, sender=ProductImage)
def my_handler(sender,instance:ProductImage,created, **kwargs):
    print()
    print(instance.image.name)
    print(instance.image.path)
    print()

    if created:
      old_path =Path( instance.image.path) 
      instance.image.name = f"{instance.product.name}-{instance.id}.jpg"
      new_path = settings.BASE_DIR / f"media/products/photos/{instance.image.name}"
      old_path.rename(new_path)
      instance.save()
    print(instance.image.path)

эти два метода работают, но когда я переименовываю файл, путь меняется перед сигналом :

E:\Programming\Python\Django Projects\Django-shop-app\media\products\photos\c-d-x-PDX_a_82obo-unsplash.jpg

после сигнала :

E:\Programming\Python\Django Projects\Django-shop-app\media\Headphones-16.jpg
Вернуться на верх