# Solution pour le stockage des fichiers dans static/uploads/ ## Problème Les fichiers uploadés via le modèle `Fichier` étaient sauvegardés dans `media/static/uploads/` au lieu de `static/uploads/`, car Django ajoute automatiquement `MEDIA_ROOT` devant le chemin. ## Solution implémentée Création d'un **custom storage** qui sauvegarde directement dans `static/uploads/` sans utiliser `MEDIA_ROOT`. ## Fichiers modifiés/créés ### 1. Nouveau storage personnalisé **Fichier:** `core/storage/backends.py` - Storage qui pointe vers le dossier `static/` au lieu de `media/` - Génère automatiquement les URLs avec `/static/` comme base ### 2. Modèle Fichier mis à jour **Fichier:** `core/models.py` - Import du `StaticStorage` - Modification du champ `f_fichier` pour utiliser le storage personnalisé ```python f_fichier = models.FileField("Fichier", upload_to='uploads/', storage=StaticStorage()) ``` ## Résultat - ✅ Les nouveaux fichiers uploadés iront dans `static/uploads/` - ✅ Les URLs générées seront `/static/uploads/nom_fichier` - ✅ Compatible avec vos liens historiques dans les articles - ✅ Pas besoin de modifier les liens existants ## Migration ### Si Django n'est pas installé localement Vous devrez faire la migration sur votre serveur de production ou dans votre environnement avec Django installé : ```bash python3 manage.py makemigrations core python3 manage.py migrate core ``` ### Si vous utilisez Docker ```bash docker-compose exec web python manage.py makemigrations core docker-compose exec web python manage.py migrate core ``` ## Test Pour tester que le storage fonctionne, exécutez : ```bash python3 test_storage.py ``` ## Notes importantes 1. Les **anciens fichiers** dans `media/static/uploads/` resteront là où ils sont 2. Les **nouveaux fichiers** iront directement dans `static/uploads/` 3. Vous pourrez déplacer manuellement les anciens fichiers si nécessaire : ```bash mv media/static/uploads/* static/uploads/ ``` ## Avantages de cette solution - ✅ Préserve les liens historiques - ✅ Solution propre avec un storage personnalisé - ✅ Facile à maintenir - ✅ Compatible avec collectstatic (les fichiers restent dans static/) ## Alternative (si besoin) Si vous voulez que Django gère les fichiers via MEDIA au lieu de STATIC (recommandé pour la production), vous devrez : 1. Utiliser le MEDIA_ROOT standard 2. Créer un script de remplacement dans vos articles pour changer `/static/uploads/` en `/media/uploads/`