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

Django ModelForm提交后不保存数据仅刷新页面(含图片上传场景)

问题根因

  • 使用FormView处理ModelForm时,默认仅做表单验证和重定向,不会调用form.save()方法将数据写入数据库
  • 带文件上传的表单未将request.FILES传递给表单实例,会导致图片数据无法被读取,直接触发表单验证失败,无法完成保存

解决方案

方案1:修改现有FormView补充逻辑

修改views.py中的EventFormView,新增文件传递和数据保存逻辑:

class EventFormView(LoginRequiredMixin, FormView):
    template_name = "events/event_form.html"
    form_class = EventCreateForm
    success_url = reverse_lazy("dashboard:events:home")

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        # 将上传的文件对象传递给表单
        kwargs['files'] = self.request.FILES
        return kwargs

    def form_valid(self, form):
        # 验证通过后保存数据到数据库
        form.save()
        return super().form_valid(form)

方案2:替换为CreateView(更推荐)

Django内置的CreateView是专门用于处理模型实例新增场景的类视图,自动集成了ModelForm保存、文件上传处理逻辑,无需手动编写重复代码:

# 先修改导入,把FormView替换为CreateView
from django.views.generic.edit import CreateView

class EventFormView(LoginRequiredMixin, CreateView):
    template_name = "events/event_form.html"
    form_class = EventCreateForm
    success_url = reverse_lazy("dashboard:events:home")

验证失败排查

如果修改后提交表单仍然停留在当前页面,说明表单验证未通过,可在模板form标签内添加错误提示代码排查具体问题:

{% if form.errors %}
<div class="alert alert-danger">
  {{ form.errors }}
</div>
{% endif %}

常见验证失败原因包括:日期格式不匹配、必填字段为空、图片大小/格式不符合模型字段限制等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:04