python - 通过文件上传从模型生成表单

标签 python django forms webforms django-forms

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

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 的一些文档,但我还无法破译它。

如果您对如何使此上传表单发挥作用有任何建议,我将非常高兴听到它们。提前致谢!

最佳答案

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

(看到一半的评论)

关于python - 通过文件上传从模型生成表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723293/

相关文章:

javascript - Ruby Rails - 可选表单输入以复选框为条件显示

html - 在tippy.js div中添加一个表单(在cytoscape.js的节点中),但文本输入和按钮未激活

python - 如何让 Popen 写入文件

Python:我可以假设条件是从左到右测试并在满足时停止吗?

Django请求框架 'ManyRelatedField'对象在修改get_fields中的查询集时没有属性 'queryset'

javascript - Jquery 应该从表单返回一组数据,返回两个

python - 使用 numpy 提取每行的最小值

python - 在 Numpy 中排列对称方阵的有效方法

django-allauth - 使用 Gmail 帐户发送电子邮件验证

链接两个模型的 Django 关系