2017-09-23 4 views
0

Je construis ma première application Django et je dois avoir une page de téléchargement où je pourrais télécharger plusieurs fichiers dans différents formulaires de téléchargement. J'ai besoin de différentes formes et, je suppose, de modèles puisque selon le formulaire, le fichier doit être stocké dans un dossier respectif dans ma racine média et subir différentes transformations. Je souhaite également que les différents utilisateurs aient différents niveaux d'accès à ces téléchargements.Formulaire de téléchargement Django avec différents modèles

Jusqu'à présent, j'ai quelque chose comme ça (j'ai un peu de code supplémentaire dans les fonctions de views.py qui envoient des données à des trames de données ou d'autres programmes, mais je ne suis pas poster les:

models.py

class Upload(models.Model): 
document = models.FileField(storage=OverwriteStorage(),upload_to=get_file_path) 
upload_date=models.DateTimeField(auto_now_add =True) 


class Upload_variables(models.Model): 
    variables = models.FileField(storage=OverwriteStorage(),upload_to=get_file_path_var) 
    upload_date=models.DateTimeField(auto_now_add =True) 

forms.py

from django import forms 
from uploader.models import Upload, Upload_variables 

class UploadForm(forms.ModelForm): 
    class Meta: 
     model = Upload 
     fields = ('document',) 

class UploadFormVar(forms.ModelForm): 
    class Meta: 
     model = Upload_variables 
     fields = ('variables',) 

views.py

def home(request): 
if request.method=="POST": 

    img = UploadForm(request.POST, request.FILES) 
    if img.is_valid(): 
     img.save() 
else: 
    img=UploadForm() 
files=Upload.objects.all() 
return render(request,'home.html',{'form':img}) 




def variables(request): 

if request.method == 'POST': 
    var = UploadFormVar(request.POST, request.FILES) 
    if var.is_valid(): 
     var.save() 

else: 
    var = UploadFormVar() 
files_st = Upload_variables.objects.all() 
return render(request, 'home.html', {'form_b': var}) 

HTML

 <form action="#" method="post" enctype="multipart/form-data"> 
      {% csrf_token %} {{form}} 
      <input type="submit" value="Upload" id="submit_form"/> 
     </form> 

     <form action="#" method="post" enctype="multipart/form-data"> 
      {% csrf_token %} {{form_b}} 
      <input type="submit" value="Upload" id="staging"/> 
     </form> 

Je peux voir 2 boutons Téléchargement mais seulement un 'choisir le fichier' .... Merci pour votre aide!

Répondre

0

Actuellement, vous placez les formulaires dans deux vues distinctes. Vous devez les mettre dans la même vue comme ceci:

 def home(request): 
      if request.method=="POST": 
        var = UploadFormVar(request.POST, request.FILES) 
        img = UploadForm(request.POST, request.FILES) 
        if img.is_valid(): 
         img.save() 
        if var.is_valid(): 
         var.save() 
      else: 
        img = UploadForm() 
        var = UploadFormVar() 
      files=Upload.objects.all() 
      return render(request,'home.html',{'form': img, 'form_b': var})