[英]Saving file in Django doesn't work
我創建了一個form
,該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.
我認為您需要這樣的更新表格:
def purchase(request):
if request.method == 'POST':
print dict(request.POST.iterlists())
form = forms.PurchaseForm(request.POST request.FILES or None)
UPD發表評論:
為了保存,也嘗試在url
添加:
from django.conf.urls.static import static
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
並檢查media
設置:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
這是給管理員的,為模型添加方法,它使用圖像字段:
def admin_image(self):
return "<img src='%'/>" % self.your_image_field.url
admin_image.allow_tags = True
並在admin.py
注冊list_display=('admin_image',)
admin.py
list_display=('admin_image',)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.