Django - 保存上传的图片

时间:2016-01-28 00:56:15

标签: python django pillow

我有一个表格,我应该上传图像,但我无法保存图像。除了图像之外,表单中的其他所有内容都能正常工作。

我确定我的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

1 个答案:

答案 0 :(得分:3)

如果您打算将文件与表单数据一起发送,则模板中enctype="multipart/form-data"标记需要form