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

Django提交反馈表单报Field 'id' expected a number错误如何解决

错误根因

错误的根本原因是你直接将request.POST作为位置参数传入了模型FeedbackForm的构造方法,Django模型构造方法的第一个位置参数对应主键id字段,因此你相当于把整个QueryDict对象赋值给了id字段,触发了「期望数字但得到QueryDict」的类型错误,和id是否自动生成无关。

解决方法

  • 优先使用你已经定义的ModelForm处理数据(自带字段校验、类型转换逻辑,是Django标准写法),将FeedbackFormResult视图代码修改为:
class FeedbackFormResult(View):
    def post(self, request, *args, **kwargs):
        form = FeedbackForm(request.POST)
        # 校验数据合法性
        if form.is_valid():
            # 校验通过后直接保存form,自动生成模型实例
            form.save()
        # 回传form到模板可以展示校验错误提示,建议提交成功后重定向到成功页避免重复提交
        return render(request, "feedback_forms/feedback_form.html", {"form": form})
  • 如果需要直接操作模型实例,不要直接传request.POST作为位置参数,改用关键字参数传值:
class FeedbackFormResult(View):
    def post(self, request, *args, **kwargs):
        feedback_form_model = apps.get_model(app_label="feedback_forms", model_name="FeedbackForm")
        # 拆包POST字典为关键字参数,或者手动逐个赋值字段
        new_feedback = feedback_form_model(**request.POST.dict())
        new_feedback.save()
        return render(request, "feedback_forms/feedback_form.html")

额外注意事项

你的模型类和ModelForm类都命名为FeedbackForm,容易出现命名空间冲突,建议将ModelForm重命名为FeedbackModelForm避免调用时混淆;同时你当前配置了表单onsubmit="return false",如果是AJAX提交请确保表单数据完整序列化上传;另外你已经定义了FeedbackFormView继承FormView,完全可以复用FormView的form_valid方法处理提交逻辑,不需要单独写FeedbackFormResult视图,更符合Django最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:57:04