有人知道为什么我的表单(filepicker)在更简单的版本中工作时会不断返回“此字段是必需的”吗?
我的观点是
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>
答案 0 :(得分:3)
将我的评论添加为正确答案:
请尝试将enctype= multipart/form-data
添加到模板文件中的<form>
元素。
如果您没有此元素,则request.FILES
将始终为空。
从https://docs.djangoproject.com/en/1.7/topics/http/file-uploads/#basic-file-uploads复制:
请注意,
request.FILES
只会在请求方法为POST
并且发布请求的<form>
具有属性enctype="multipart/form-data"
时才包含数据。否则,request.FILES
将为空。
答案 1 :(得分:0)
如果models.py
中需要该字段(即您尚未说明blank=True
或null=True
),并且您使用的是ModelForm
,则该字段将是ModelForm