from pathlib import Path from django.conf import settings from django.core.files.storage import FileSystemStorage class ProductImageStorage(FileSystemStorage): """ Save product uploads into MEDIA_ROOT and keep older static/media paths readable for backward compatibility. """ def __init__(self, *args, **kwargs): static_base_url = settings.STATIC_URL if settings.STATIC_URL.endswith("/") else f"{settings.STATIC_URL}/" media_base_url = settings.MEDIA_URL if settings.MEDIA_URL.endswith("/") else f"{settings.MEDIA_URL}/" super().__init__( location=settings.MEDIA_ROOT, base_url=media_base_url, ) self.legacy_storage = FileSystemStorage( location=Path(settings.BASE_DIR) / "static", base_url=static_base_url, ) self.legacy_media_storage = FileSystemStorage( location=Path(settings.BASE_DIR) / "media", base_url=media_base_url, ) def exists(self, name): return ( super().exists(name) or self.legacy_storage.exists(name) or self.legacy_media_storage.exists(name) ) def open(self, name, mode="rb"): if super().exists(name): return super().open(name, mode) if self.legacy_storage.exists(name): return self.legacy_storage.open(name, mode) return self.legacy_media_storage.open(name, mode) def url(self, name): if super().exists(name): return super().url(name) if self.legacy_storage.exists(name): return self.legacy_storage.url(name) if self.legacy_media_storage.exists(name): return self.legacy_media_storage.url(name) return super().url(name)