簡體   English   中英

Django - 保存上傳的圖像

[英]Django - Save an uploaded image

我有一個表格,我應該上傳圖像,但我無法保存圖像。 除圖像外,表單中的其他所有內容都能正常工作。

我確定我的addGame方法存在一些問題,但我已經嘗試了幾十種不同的方法而沒有運氣。

我已經閱讀了文檔 ,但看起來我仍然做錯了,因為圖像永遠不會被保存。

(正如旁注:我正在使用枕頭來裁剪圖像,而且我不確定我是否也正確地做到了這一點,但我最近剛補充說,因為圖像沒有保存我有無法知道這是否正確實現。當我嘗試上傳工作時,我將離開裁剪部分注釋掉。)

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

如果您打算將文件與表單數據一起發送,則模板中的form標記需要enctype="multipart/form-data"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM