You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单图片上传异常:提交后图片未保存的问题求助

Django表单上传图片无法保存的解决方法

问题说明

开发胶片相机资讯网站时,已完成Camera、Film模型及对应ModelForm的创建,前端模板已设置enctype="multipart/form-data",但通过前端表单提交数据时,仅能创建数据库条目,图片无法保存;而后台Admin面板的图片上传功能正常,需要在单个表单内解决该问题。

问题原因

在处理POST请求的视图中,仅将request.POST传入ModelForm,未传递request.FILES。Django中,文件上传的数据单独存储在request.FILES对象中,Admin后台会自动处理这部分数据,但自定义视图必须手动将其传入表单,否则表单无法获取并保存图片文件。

解决方案

修改add_new_camera视图,在初始化ModelForm时同时传入request.POST和request.FILES:

修改后的视图代码

@login_required
def add_new_camera(request):
    if request.method != 'POST':
        form = CameraForm()
    else:
        # 同时传入POST数据和文件上传数据
        form = CameraForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect ('content_app:cameras')

    context = {
        'form': form,
    }
    return render (request, 'content_app/add_new_camera.html', context)

扩展说明

如果后续需要处理Film模型的表单上传,同样需要修改对应的视图函数,确保初始化FilmForm时传入request.POST和request.FILES:

@login_required
def add_new_film(request):
    if request.method != 'POST':
        form = FilmForm()
    else:
        form = FilmForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect ('content_app:films')

    context = {
        'form': form,
    }
    return render (request, 'content_app/add_new_film.html', context)

注意事项

  1. 你的前端模板已正确设置enctype="multipart/form-data",无需修改;
  2. 确认项目的媒体文件配置(MEDIA_ROOT和MEDIA_URL)已正确设置,否则即使表单接收了文件,也无法存储到指定路径。

内容的提问来源于stack exchange,提问作者bounty_python

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:23:28