【发布时间】:2016-04-14 05:36:07
【问题描述】:
我创建了一个form,它应该得到text,modelchoice and file。一切正常,而不是 file 保存。它不返回任何error,但不保存任何文件。
这就是我的表格:
class PurchaseForm(forms.Form):
text = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 18, 'cols': 90}))
language = forms.ModelChoiceField(queryset=Language.objects.all())
file = forms.FileField(required=False)
这是一个叫做作业的模型:
class Job(models.Model):
customer = models.ForeignKey(User,null=False,related_name='customer')
freelancer = models.ForeignKey(User,null=True,related_name='freelancer')
description = models.TextField(null=True)
price = models.FloatField(null=True)
language = models.ForeignKey(Language,null=False)
file = models.FileField(upload_to='files')
这是视图:
def purchase(request):
if request.method == 'POST':
print dict(request.POST.iterlists())
form = forms.PurchaseForm(request.POST)
if form.is_valid():
job = Job()
print form.cleaned_data
job.customer = request.user
job.language = form.cleaned_data['language']
# job.description = form.cleaned_data['description']
if 'file' in form.cleaned_data.keys():
print 'OKOK'
job.file = form.cleaned_data['file']
# print job.file.path # If I uncomment this, it raises error Exception Value: The 'file' attribute has no file associated with it.
job.save()
return render(request, 'purchases/complete.html')
else:
purchase_form = forms.PurchaseForm()
return render(request, 'jobs/purchase.html', {'purchase_form': purchase_form})
在这个view 中有两个prints。第一个打印这个(我可以在那里看到文件):
{u'text': [u'\u010dr\u010dr\u010dr\u010d'], u'csrfmiddlewaretoken': [u'os8p9oRWR
d8mMTmSsGPd55Y7bWy6pMWl'], u'language': [u'3'], u'file': [u'export.csv']}
第二个打印出来:
{'text': u'\u010dr\u010dr\u010dr\u010d', 'file': None, 'language': <Language: HG
: Hungar - Intermediate - 0.02 eur/sign>}
就像我没有通过form上传(发送)任何文件一样。
你知道为什么会这样吗?
编辑:如果我不注释 print job.file.path 行,则会引发此错误:异常值:
The 'file' attribute has no file associated with it.
【问题讨论】:
标签: python django file-upload django-models filefield