Résolue

Best practice pour un upload multiple ?

# Fichiers # Django # Formulaires

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

Thibault houdon

Mentor

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/)

Salut Thibault, quelle rapidité ;)
Merci beaucoup pour l'info sur les "inline models" ça correspond tout à fait à mon besoin actuel et ça m'évite de devoir ajouter des dépendances à mon projet (ce que je souhaite éviter dans la mesure du possible) !
Bonne journée à toi !

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.