为什么我的 Django 表单一直显示“此字段为必填字段”

2024-01-09

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

我的看法是

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>This field is required.</li></ul></li></ul>


添加我的评论作为正确答案:

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

如果你没有这个元素request.FILES将永远是空的。

复制自https://docs.djangoproject.com/en/1.7/topics/http/file-uploads/#basic-file-uploads https://docs.djangoproject.com/en/1.7/topics/http/file-uploads/#basic-file-uploads:

注意request.FILES仅当请求方法为时才包含数据POST<form>发布请求的属性enctype="multipart/form-data"。否则,request.FILES将是空的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Django 表单一直显示“此字段为必填字段” 的相关文章

随机推荐