Bonjour,

Je souhaite pouvoir insérer plusieurs fichiers dans un répertoire à partir d'un formulaire et sauvegarder les nom dans la bdd.
Voici mon code:
Code : 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
19
20
21
22
23
 
models.py
 
class Depart(models.Model):
    num_enreg = models.PositiveIntegerField(blank=True)
    date_emission = models.DateField(blank=True)
    types = models.CharField(max_length=5, blank=True)
    destinataire = models.CharField(max_length=50, blank=True)
    objet = models.CharField(max_length=100, blank=True)
    observation = models.CharField(max_length=100, blank=True)
    pj = models.FileField(null=True, upload_to=generate_filename, blank=True)
 
 
    def __unicode__(self):
        return unicode(self.objet)
 
def generate_filename(instance, filename):
    year = datetime.now().year
 
 
    url = 'Depart/%s/%s' % (year, filename)
    print url
    return url
Code : 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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
forms.py
class DepartForm(forms.ModelForm):
    pj = forms.FileField(required=False,widget = forms.ClearableFileInput(attrs={'multiple':True}))
    class Meta:
        model = Depart
        fields = '__all__'
 
    def __init__(self, *args, **kwargs):
        super(DepartForm, self).__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control'
 
 
views.py
def depart(request):
    if request.method == 'POST':
 
        depart_form = DepartForm(request.POST, request.FILES)
 
        if depart_form.is_valid():
            num_enreg = depart_form.cleaned_data['num_enreg']
            date_emission = depart_form.cleaned_data['date_emission']
            types = depart_form.cleaned_data['types']
            destinataire = depart_form.cleaned_data['destinataire']
            objet = depart_form.cleaned_data['objet']
            observation = depart_form.cleaned_data['observation']
            pj = depart_form.cleaned_data['pj']
 
            handle_uploaded_file_depart(request.FILES['pj'],request.FILES['pj'])
 
            depart_form.save()
 
        return HttpResponseRedirect('liste_depart')
 
    else:
        depart_form = DepartForm()
 
    return render(request, 'formulaire_depart.html', {'depart_form': depart_form})   
 
 
 
def handle_uploaded_file_np_depart(f, filename):
    repertoire_maitre = 'xxxxxxxx'
    chemin_du_repertoire = 'media/Depart/'
    repertoire_maitre = year+'/'
 
    with open(chemin_du_repertoire +'%s/%s' % (repertoire_maitre, filename), 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)
J'ai bien renseigné le champs MEDIA dans le settings.py, seulement je veux pouvoir creer des répertoires dynamiques en fonction du "num_enreg"

Aussi, comme précisé plus haut, je veux pouvoir uploader plusieurs fichiers à partir d'un formulaire et les mettre dans un chemin spécifique, mais aussi sauvegarder les nom dans une bdd

Merci