使用单独的输入在表单上上载2个单个文件:Django

时间:2017-05-26 20:39:34

标签: django forms file-upload django-views django-file-upload

我正在尝试构建一个应用程序,要求用户上传2个不同的pdf文件,每个文件来自一个单独的输入按钮/区域。我是Django的新手,通过阅读文档很多次,我已经有了一些工作要做。

使用<form method="post" enctype="multipart/form-data">我能够获得两个输入字段,如下所示:App Screenshot of 2 input areas

但是,当我在任何一种情况下单击选择按钮并选择文件并单击“上传”时,两个输入区域中都会显示相同的2个文件。我已经尝试了很多,似乎找不到任何试图解决我的问题的资源。

快速注意:我知道有一些方法可以在一个输入区域上传多个文件,但我不想这样做。我想特别将2个不同的输入区域作为设计决策。

我不确定这是否接近正确的方法,或者是否有更好的工具来处理这种情况。下面是我写的代码块。如果有人能就如何更好地解决这个问题给我建议或告诉我如何修复我的代码,那将非常感激。

谢谢!

forms.py

class FilePDFForm(forms.ModelForm):
class Meta:
    model = FilePDF
    fields = ('identifier', 'pdf', 'pdf2' )

models.py

class FilePDF(models.Model):
identifier = models.CharField(max_length=50, blank = True)
pub_date = models.DateTimeField(auto_now_add=True)
pdf = models.FileField(upload_to='documents/')
pdf2 = models.FileField(upload_to='documents/')

def __str__(self):
    return self.pdf.name + ',' + self.pdf2.name

views.py

def index(request):
if request.method == 'POST' and request.FILES['myfile'] and request.FILES['myfile2']:
    genfile = request.FILES['myfile']
    genfile2 = request.FILES['myfile2']
    fs = FileSystemStorage()
    filename = fs.save(genfile.name, genfile)
    filename2 = fs.save(genfile2.name, genfile2)
    uploaded_file_url = fs.url(filename)
    uploaded_file2_url = fs.url(filename2)
    file1_uploaded = True

    return render(request, '...index.html', {
        'uploaded_file_url': uploaded_file_url,
        'uploaded_file2_url': uploaded_file2_url,
        'file1_name': filename,
        'file2_name': filename2
    })

return render(request, '...index.html')

的index.html

    

<div class="col-xs-3">
  <div class="form-group">
    <label class="control-label">Please select the first PDF file from your
    computer.</label> <input type="file" class="filestyle" name="myfile"
    data-buttontext=" Select" data-buttonname="btn btn-primary" /><br />
    <label class="control-label">Please select the second PDF file from your
    computer.</label> <input type="file" class="filestyle" name="myfile2"
    data-buttontext=" Select" data-buttonname="btn btn-primary" /> <button type=
    "submit" class="btn btn-primary">Upload</button>
  </div>
</div>

1 个答案:

答案 0 :(得分:0)

更改您的观点,例如

def index(request):
  if request.method == 'POST':
    f = FilePDFForm(request.POST, request.FILES)
    if f.is_valid():
      new_object = f.save()  
      # do remaining thing here
      -----------------






  return render(request, '...index.html')

有关详情,请参阅此https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#modelform