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"):
Ma vue :
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
Mon HTML :
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})
Lorsque j'affiche ma page tout se passe bien, j'ai bien une zone de saisie obligatoire et un input obligatoire.
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 %}
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
saisie de la zone et choix du fichier :
validation de l'écran pour générer l'erreur :
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.
Partager