Bonjour,

Voila 2 jours que je m'arrache les cheveux sur un problème d'upload dont je n'arrive pas à comprendre mon erreur.

Pour expliquer mon problème j'ai réalisé un tout petit formulaire (avec une erreur systématique sur la zone "Zone"):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class Upload_File(forms.Form):
    def __init__(self, *args, **kwargs):
        super(Upload_File, self).__init__(*args, **kwargs)
 
        self.fields['Zone'] = forms.CharField(max_length=100, required = True, label='Test')
        self.fields['Upload_File'] = forms.FileField(label='Sélectionner votre fichier', required=True)
 
    def clean_Zone(self):
        cleaned_data = super(Upload_File, self).clean()
        Clean_Zone = self.cleaned_data.get('Zone')
        raise forms.ValidationError("Error")
        return Clean_Zone
Ma vue :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django import forms
from .Formulaires_Dynamiques.forms_1 import Formulaire_Django, Upload_File
 
def Archivage_Dynamique(request, Pack, Type_Doc) :
 
    if request.method == 'POST':
        form = Upload_File(request.POST, request.FILES)
        if form.is_valid():
           return HttpResponse('Bravo')
 
    else:
        form = Upload_File()
 
    return render(request, "xemii/Archivage_Dynamique2.html", {'form': form})
Mon HTML :

Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{% extends "xemii/Base.html" %}
{% load static %}
{% block content %}
<section class="row justify-content-center" style="padding-top:75px">
    <div class="container">
        <form method="post"  enctype="multipart/form-data" class="form-control formulaire" id="form_id">
            {% csrf_token %}
            {{form.as_p}}
            <div style="padding:50px">
            <input type="submit" value="Test" class="btn btn-outline-primary btn-rounded waves-effect" style="display:block; margin:auto; width:200px">
            </div>
 
            Request.FILES {{request.FILES}}
 
        </form>
    </div>
</section>
{% endblock %}
Lorsque j'affiche ma page tout se passe bien, j'ai bien une zone de saisie obligatoire et un input obligatoire.

Mon problème est que lorsque je rencontre une erreur (généré par ma zone "ZONE" via la fonction clean_ZONE), j'ai bien mon fichier choisi dans le request.FILES (affiché en bas de ma page), mais ma zone Upload_File se vide.

voici la démo :

affichage de la page

Nom : Capture d’écran du 2020-10-30 16-27-14.png
Affichages : 255
Taille : 13,7 Ko

saisie de la zone et choix du fichier :

Nom : Capture d’écran du 2020-10-30 16-27-33.png
Affichages : 250
Taille : 14,4 Ko

validation de l'écran pour générer l'erreur :

Nom : Capture d’écran du 2020-10-30 16-27-47.png
Affichages : 255
Taille : 20,9 Ko

Je perds mon fichier que j'avais sélectionné alors que mon request.FILES est bien affiché.

J'ai bien l'attribut "multipart/form-data" dans ma balise form en html, je passe bien le request.FILES lors de la génération de mon formulaire au moment du post.

Je n'arrive pas à voir ce qui ne va pas.

Pouvez-vous m'aider ?

Merci.