【问题标题】:Form from Model with File Upload带有文件上传的模型表格
【发布时间】:2010-09-16 02:24:45
【问题描述】:

我正在尝试在前端模仿 Photologue 应用程序的管理界面。为了实现这一点,到目前为止,我已经在视图中创建了一些代码:

def galleryuploader(request):
    GalleryFormSet = modelformset_factory(GalleryUpload)    
    if request.method == 'POST':
        formset = GalleryFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
            # do something. ... do what?
    else:
        formset = GalleryFormSet()
    return render_to_response("cms_helper/gallery_upload.html", {
        "formset": formset,
    })

还有一个模板:

<form method="post" action="">
    {{ formset }} 
    <input type="submit" />
</form>

我正在使用 django 的“form from models”方法来生成这个前端表单。

问题:当我尝试上传文件(因为我正在将照片上传到照片库)并点击提交时,它返回一个表单错误,告诉我缺少必填字段(文件)。

我想我没有检查任何文件的请求,但即使我要检查,我也不太确定如何检查。这里有一些关于file uploads 的文档,但我还不能破译它。

如果您对如何使用此上传表单有任何建议,我会非常高兴听到这些建议。提前致谢!

【问题讨论】:

    标签: python django forms webforms django-forms


    【解决方案1】:

    enctype="multipart/form-data" 属性添加到您的表单标签。此外,您还需要对上传的文件进行实际操作。这是来自django docs 的示例:

    from django.http import HttpResponseRedirect
    from django.shortcuts import render_to_response
    
    # Imaginary function to handle an uploaded file.
    from somewhere import handle_uploaded_file
    
    def upload_file(request):
        if request.method == 'POST':
            form = UploadFileForm(request.POST, request.FILES)
            if form.is_valid():
                # you'll need to loop through the uploaded files here.
                handle_uploaded_file(request.FILES['file'])
                return HttpResponseRedirect('/success/url/')
        else:
            form = UploadFileForm()
        return render_to_response('upload.html', {'form': form})
    
    def handle_uploaded_file(f):
        destination = open('some/file/name.txt', 'wb+')
        for chunk in f.chunks():
            destination.write(chunk)
        destination.close()
    

    (看一半左右的评论)

    【讨论】:

    • 查看 Photologue 模型,我看到名为“process_zipfile”的函数以及“GalleryUpload”类中的“save”。我会猜测并说我应该从我的视图中调用这些(如您的示例代码所示)?
    • 布埃诺。感谢您的帮助。我本可以自己阅读,但突出显示它总是有帮助的:P
    • @Brian D:抱歉,我没有看到您之前的评论。第二双眼睛总是有帮助 :) 很高兴你弄明白了。
    猜你喜欢
    • 2016-07-22
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2021-09-19
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多