我有一个表格,我应该上传图像,但我无法保存图像。除了图像之外,表单中的其他所有内容都能正常工作。
我确定我的addGame
方法存在一些问题,但我已经尝试了几十种不同的方法而没有运气。
我已经浏览了documentation,但看起来我仍然做错了,因为图片永远不会被保存。
(正如旁注:我正在使用Pillow裁剪图像,我也不确定我是否正确地做到了这一点,但我刚刚在最近添加了它,因为图像没有保存我无法知道是否正确实现。当我尝试上传工作时,我将离开裁剪部分。)
forms.py
class GameForm(forms.ModelForm):
image = forms.ImageField()
code = forms.Textarea()
deleteGame = forms.BooleanField(required=False, widget=forms.HiddenInput())
class Meta:
model = Game
fields = ('title', 'image', 'description', 'requirements', 'code', 'deleteGame')
views.py
:
@login_required
def add_game(request):
user = request.user
if request.method == 'POST':
form = GameForm(request.POST, request.FILES)
if form.is_valid():
form = form.save(commit=False)
image = request.FILES['image']
box = (200, 200, 200, 200)
cropped = image.crop(box)
form.image = cropped
form.user = request.user
form.save()
return HttpResponseRedirect('/userprofile')
else:
form = GameForm()
args = {}
args.update(csrf(request))
args['user'] = user
args['form'] = form
return render_to_response('addgame.html', args)
models.py
class Game(models.Model):
user = models.ForeignKey(User, blank=True)
title = models.CharField(max_length=256)
image = models.ImageField(upload_to='games', blank=True)
description = models.CharField(max_length=256)
requirements = models.CharField(max_length=256)
code = models.TextField()
deleteGame = models.BooleanField(default=False)
def __unicode__(self):
return self.title
我的媒体设置如下:
MEDIA_ROOT = 'media/'
MEDIA_URL = '/media/'
文件结构:
如果我通过管理门户添加图像,它会正确保存,但我在日志中收到如下错误:
未找到:/media/games/Screen_Shot_2015-12-29_at_1.03.05_AM.png
答案 0 :(得分:3)
如果您打算将文件与表单数据一起发送,则模板中enctype="multipart/form-data"
标记需要form
。