以下代码可以很好地将缩略图图像存储在/ media /目录中。我想将所有图像存储在以下目录中,但django还将图像路径保存在数据库中。请告诉我,如何阻止django在数据库中保存路径和地址?
model.py:代码
from django.db import models
class Document(models.Model):
thumbnail = models.ImageField()
views.py:代码
from .models import Document
from .forms import DocumentForm
if (request.FILES['thumbnail']):
newdoc = Document(thumbnail = request.FILES['thumbnail'])
newdoc.save()
forms.py:代码
from django import forms
class DocumentForm(forms.Form):
thumbnail = forms.ImageField(
label='Select a file',
help_text='max. 42 megabytes'
)
template.html:代码
<form action="" method="post" id="imgUpload" enctype="multipart/form-data">
<p>{{ form.non_field_errors }}</p>
<p>{{ form.thumbnail.label_tag }} {{ form.thumbnail.help_text }}</p>
<p>
{{ form.thumbnail.errors }}
{{ form.thumbnail }}
<button type="submit" id="thumbUpload" class="btn btn-success"><i class="glyphicon glyphicon-picture"></i> Upload Thumbnails</button>
</form>
答案 0 :(得分:1)
您必须覆盖表单方法,在保存有效表单之前,或者您可以处理代码,您不需要拥有可以处理的模型或表单
image = request.FILES['myfile']
现在您拥有的图像可以直接保存而无需模型
从Django文档转载的示例。
从django.http导入HttpResponseRedirect 来自django.shortcuts导入render_to_response
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render_to_response('upload.html', {'form': form})
def handle_uploaded_file(f):
destination = open('file path', 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
您可以更改文件路径&#39;使用您要存储图像的路径
答案 1 :(得分:0)
我不清楚你想要实现的目标,但解决方案很简单。只需获取文件对象并保存...
哦..还有一件事就是删除models.py和其他文件中的所有缩略图......
def handle_uploaded_file(f):
destination = open('your_media_path/media/file.png', 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
在POST视图中
f = request.FILES['thumbnail']
handle_uploaded_file(f)