为什么我的Django表单会不断说“必填字段”? [英] Why does my Django form keep saying "this field is required"
问题描述
有人知道为什么我的表单(文件选择器)在较简单的版本中工作时会不断返回此字段是必需的吗?
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 wasPOST
and the<form>
that posted the request has the attributeenctype="multipart/form-data"
. Otherwise,request.FILES
will be empty.
这篇关于为什么我的Django表单会不断说“必填字段”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!