Best practice pour un upload multiple ?
Salut la Commu,
J'aimerai savoir quelle est la bonne pratique pour gérer l'upload de fichiers multiples dans un model Django.
Je travail sur un site Portfolio, j'ai sur ce site un model "Project" et un autre "ProjectImage", idéalement j'aimerais pouvoir uploader 1 à + images depuis le formulaire de création de nouveau projet dans mon admin Django.
J'ai pas l'impression que "ImageField" de Django colle à mon besoin, en creusant sur le net j'ai trouvé le projet github django-multifilefield ... vous connaissez ?
Comment vous gérez ce genre de situations de votre côté ?
Merci d'avance pour vos retours
Salut Vincent !
Pour ça effectivement je te conseille d'avoir un modèle distinct pour les images et de le lier au modèle principal (ton modèle "Project") grâce à une Foreign Key.
from django.db import models
class Project(models.Model):
# Tes champs pour le projet ici...
title = models.CharField(max_length=100)
description = models.TextField()
class ProjectImage(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='images')
image = models.ImageField(upload_to='project_images')
Si tu souhaites pouvoir gérer l'upload directement dans l'admin, tu peux utiliser des "inline model" pour pouvoir uploader plusieurs images en même temps quand tu crées un projet :
from django.contrib import admin
from .models import Project, ProjectImage
class ProjectImageInline(admin.TabularInline):
model = ProjectImage
extra = 1 # Nombre d'uploads de champs images affichés par défaut, tu peux en mettre plus
class ProjectAdmin(admin.ModelAdmin):
inlines = [ProjectImageInline,]
admin.site.register(Project, ProjectAdmin)
admin.site.register(ProjectImage) # Optionnel, si tu veux pouvoir gérer les images séparément aussi
Ce code te permettra d'uploader plusieurs images dans la section de création ou d'édition d'un projet directement depuis l'interface d'administration de Django :)
Pour django-multifilefield, je ne l'ai pas personnellement jamais utilisé, ça peut être une bonne alternative, mais assure-toi de bien d'évaluer la popularité et l'activité de développement de ces libs (regarde la date des derniers commit, le nombre de "star" sur github, etc). C'est pour éviter d'être dépendant d'une lib qui n'est pas ou plus maintenue.
Et après si tu veux gérer l'upload multiple niveau front, tu peux utiliser plusieurs formulaires (là c'est du HTML "pur"), ou utiliser les formset de Django pour le faire de façon plus directe (voir la doc : https://docs.djangoproject.com/en/5.0/topics/forms/formsets/)
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte