gpt4 book ai didi

python - Django:如何使用 ImageField 的 upload_to 属性

转载 作者:行者123 更新时间:2023-11-28 22:05:38 32 4
gpt4 key购买 nike

我正在编写一个带有图片上传功能的大型应用程序。

这是我的模型:

class GallryImage(models.Model):
# ...
image = models.ImageField(max_length=255, upload_to='gallery', height_field='width', width_field='height')
width = models.IntegerField()
height = models.IntegerField()
# ...

这是我处理上传的方式:

image_name = 'image.png';
destination = open(settings.MEDIA_ROOT + '/gallery/' + image_name, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()

这段代码有点违反了 DRY 原则——路径 gallery 重复了两次。

问题:如何重用我在模型中指定的路径 (upload_to='gallery'),这样我就不必在上传处理程序中重复?

我正在使用 python 2.6 和 Django 1.3 beta。

谢谢!

基于 Paulo 回答的解决方案

保存模型实例时,文件会自动上传,所以我要做的就是:

def add(request):
from forms import ImageAddForm
form = ImageAddForm()
if request.method == 'POST':
form = ImageAddForm(request.POST, request.FILES)
if form.is_valid():
image = GalleryImage(
image = form.cleaned_data['image']
)
image.save() # file is uploaded to upload_to dir!
return HttpResponseRedirect(reverse('image_add') + '?image_added=')
else:
form = ImageAddForm()

return render_to_response('gallery/add.html',
locals(),
context_instance=RequestContext(request))

最佳答案

forms framework应该为你处理这个。除非您想将文件存储在文件系统以外的某个容器中,否则无需手动保存文件。

class UploadImageForm(forms.ModelForm):
class Meta:
model = GallryImage
...
# Sample view
def upload_file(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/success/url/')
else:
form = UploadImageForm()
return render_to_response('upload.html', {'form': form})

关于python - Django:如何使用 ImageField 的 upload_to 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005181/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com