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

使用Django ModelForm提交数据报错‘This field is required’求助

问题分析与解决办法

1. 表单缺少文件上传编码配置

你的表单包含FileField类型的documentFile字段,但HTML的<form>标签没加enctype="multipart/form-data",这会导致文件无法被正确提交,直接触发该字段的必填错误。

修改HTML代码:

{% extends 'base.html' %}
{% block columncard %}
<div class="container">
    <!-- 添加文件上传编码属性 -->
    <form method="POST" enctype="multipart/form-data">
      <fieldset>
        <legend>Form</legend>
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn btn-primary">Submit</button>
      </fieldset>
    </form>
</div>

{% endblock %}

2. Uploader字段无需用户手动填写

uploader是关联当前登录用户的外键,没必要在表单里让用户选择,应该在视图里自动赋值给当前登录用户,避免用户未选择时触发必填错误。

修改forms.py:

class MyForm(forms.ModelForm):
  class Meta:
    model = Docstest
    # 移除uploader字段,不在表单中展示
    fields = ["nameOfApplicant","serviceRequestedName","nameOfDocument","documentFile",]
    labels = {
        "nameOfApplicant":"申请人姓名",
        "serviceRequestedName":"申请服务",
        "nameOfDocument":"文件名称",
        "documentFile":"上传文件",
    }

修改视图函数(以函数视图为例):

from django.shortcuts import render, redirect
from .forms import MyForm

def upload_doc(request):
    if request.method == 'POST':
        # 必须传入request.FILES处理文件上传
        form = MyForm(request.POST, request.FILES)
        if form.is_valid():
            # 先暂存表单数据,不提交到数据库
            doc_obj = form.save(commit=False)
            # 给uploader字段赋值当前登录用户
            doc_obj.uploader = request.user
            doc_obj.save()
            return redirect('success_page') # 替换成你的成功跳转页面
    else:
        form = MyForm()
    return render(request, '你的模板文件名.html', {'form': form})

如果用类视图(比如CreateView),可以这么改:

from django.views.generic.edit import CreateView
from .models import Docstest
from .forms import MyForm

class DocCreateView(CreateView):
    model = Docstest
    form_class = MyForm
    success_url = '/success/' # 替换成你的成功跳转地址

    def form_valid(self, form):
        # 自动赋值当前用户给uploader字段
        form.instance.uploader = self.request.user
        return super().form_valid(form)

3. 检查关联模型是否有可用数据

serviceRequestedName和nameOfDocument是外键字段,如果对应的ServicesOffered和DocumentsRequired模型里没有数据,表单的下拉框会没有选项,用户无法选择,也会触发必填错误。先给这两个关联模型添加一些数据再测试。


内容的提问来源于stack exchange,提问作者Good Start Me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:40:23