为什么我的Django表单会不断说“必填字段”? [英] Why does my Django form keep saying "this field is required"

查看:137
本文介绍了为什么我的Django表单会不断说“必填字段”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人知道为什么我的表单(文件选择器)在较简单的版本中工作时会不断返回此字段是必需的吗?

Does anyone know why my form (filepicker) is constantly returning "this field is required" when it worked in a simpler version?

我的视图是

def add_attempt(request, m_id, a_id):
    template = loader.get_template('add_attempt.html')
    if request.method == 'POST':
        import pprint 
        pprint.pprint(request.POST)
        pprint.pprint(request.FILES)
        form = UploadAttemptForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            form.instance.pub_date = datetime.datetime.now()
            form.instance.user_id = request.user
            form.instance.assignment = m.Assignment.objects.get(id=a_id)
            form.save()
            return HttpResponseRedirect(reverse('assignment', args=(m_id, a_id)))
        else:
            print form.errors
    else:
        form = UploadAttemptForm()
    context = RequestContext(request, 
        {
        'form':form,
        })
    return HttpResponse(template.render(context))

我的模型

class Attempt(models.Model):
    user_id = models.ForeignKey(User)
    pdf_filename = models.FileField(storage=settings.S3_STORAGE, upload_to='pdfs')
    pub_date = models.DateTimeField('date uploaded')
    assignment = models.ForeignKey(Assignment)

我的表单是

class UploadAttemptForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UploadAttemptForm, self).__init__(*args, **kwargs)

    class Meta():
        model = Attempt
        fields = ['pdf_filename',]

错误打印为

`<QueryDict: {u'submit': [u'Upload Attempt'], u'pdf_filename': [u'something.pdf']}>`

< MultiValueDict:{}>
< ul class = errorlist>< li> pdf_filename< ul class = errorlist>< li>该字段是必填字段。< / li< / ul>< / li>< / ul>

推荐答案

添加我的评论作为适当的答案:

Adding my comment as a proper answer:

请尝试添加 enctype = multipart / form-data 到模板文件中的< form> 元素。

Please try adding enctype= multipart/form-data to your <form> element in your template file.

如果没有此元素,则您的 request.FILES 始终为空。

If you don't have this element your request.FILES will always be empty.

https://docs.djangoproject.com/zh-CN/1.7/topics/http/file-uploads/#basic-file-uploads


请注意, request.FILES 仅在请求方法为 POST 并且发布请求的< form> 具有属性 enctype = multipart / form-data 。否则, request.FILES 将为空。

Note that request.FILES will only contain data if the request method was POST and the <form> that posted the request has the attribute enctype="multipart/form-data". Otherwise, request.FILES will be empty.

这篇关于为什么我的Django表单会不断说“必填字段”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆