2017-09-23 43 views
0

我正在構建我的第一個Django應用程序,我需要一個上傳頁面,我可以上傳不同上傳格式的多個文件。我需要不同的形式,我猜,這取決於形式,文件必須存儲在我的媒體根目錄中的相應文件夾中,並進行不同的進一步轉換。我也希望不同的用戶對這些上傳有不同的訪問級別。Django上傳表格與不同的模型

到目前爲止,我有這樣的事情(我有相當多的內部在views.py將數據發送到數據幀或其他程序功能的附加代碼,但我不張貼那些:

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> 

所以我可以看到2個按鈕上傳,但只有一個 '選擇文件' .... 謝謝您的幫助!

回答

0

目前您將表單放在兩個單獨的視圖中。你需要像這樣把它們放在同一個視圖中:

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