|
@@ -0,0 +1,75 @@
|
|
|
|
|
+# 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/`
|