【问题标题】:Django upload form with different models不同模型的Django上传表单
【发布时间】:2018-03-05 03:46:49
【问题描述】:

我正在构建我的第一个 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 个上传按钮,但只有一个“选择文件”.... 感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    目前您将表单放置在两个单独的视图中。您需要将它们放在同一个视图中,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-20
      • 2021-12-31
      • 2020-02-05
      • 2020-12-29
      • 2021-09-19
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      相关资源
      最近更新 更多