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

Django图片无法上传至media/eventimg文件夹问题求助

Django网页端图片上传失败问题排查与解决

问题描述

网页端提交表单时,图片无法上传至media/eventimg文件夹,但通过admin面板可正常上传。相关代码如下:

模型代码

class Events(models.Model):
    user_name = models.TextField()
    e_image = models.ImageField(upload_to='eventimg')
    e_poster = models.ImageField(upload_to='eventimg')
    e_end_date = models.DateTimeField()

    def __str__(self) -> str:
        return self.e_name

    def create_event(self, value): #value is send from view.py, below is its structure
        self.user_name = value['username']
        self.e_image = value['image']
        self.e_poster = value['poster']
        self.e_start_date = value['startdate'] 

视图传参代码

# 传入参数的value字典结构
value= {
            'username': request.POST.get('userName'),
            'image': request.POST.get('eventImage'),
            'poster': request.POST.get('poster'),
            'enddate': datetime.strptime(request.POST.get('endDate'), '%d-%m-%Y').strftime("%Y-%m-%d")
                   }

核心问题与解决步骤

1. 文件上传需从request.FILES获取,而非request.POST

网页上传的文件不会存放在request.POST中,必须通过request.FILES获取。修改视图中的value字典:

value= {
            'username': request.POST.get('userName'),
            'image': request.FILES.get('eventImage'),
            'poster': request.FILES.get('poster'),
            'enddate': datetime.strptime(request.POST.get('endDate'), '%d-%m-%Y').strftime("%Y-%m-%d")
       }

2. 表单需添加enctype="multipart/form-data"属性

前端提交文件的表单必须指定该属性,否则文件无法被正确传递到后端。示例表单代码:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="eventImage">
    <input type="file" name="poster">
    <!-- 其他表单字段 -->
    <button type="submit">提交</button>
</form>

3. 修正模型方法中的字段匹配错误

模型中定义的字段是e_end_date,但create_event方法里赋值给了不存在的e_start_date,同时视图传参的key是enddate,需统一字段名:

def create_event(self, value):
    self.user_name = value['username']
    self.e_image = value['image']
    self.e_poster = value['poster']
    self.e_end_date = value['enddate']  # 匹配模型中的e_end_date字段

4. 确认MEDIA相关配置正确

在项目settings.py中确保以下配置无误:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

同时在项目urls.py中添加媒体文件路由:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 其他路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

5. 检查文件夹权限

确保media/eventimg文件夹存在,且服务器进程拥有该文件夹的写入权限。若文件夹不存在,可手动创建或确保父文件夹有写入权限让Django自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:25:18