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

Django表单提交报错:'ServerRequestForm'无'get'属性

Django表单提交报错:'ServerRequestForm' object has no attribute 'get'

错误根源

报错堆栈指向ServerRequestForm的__init__方法中这一行代码:

district_id = int(self.get('district'))

ModelForm实例不存在get方法,正确的做法是通过self.data属性获取请求提交的数据,这和你处理province字段的逻辑保持一致。

核心修复步骤

修改forms.py中ServerRequestForm的对应代码:

# 替换原错误代码
district_id = int(self.data.get('district'))

额外需要修正的问题

1. Teacher模型关联错误

你的Teacher模型外键关联的是SchoolProfile(字段名school),但视图的form_valid方法中错误地赋值给了不存在的server_request字段:

# 替换原错误代码
teacher.school = self.object

2. 模板表单变量不匹配

视图继承FormView后,主表单的默认变量名是form,但模板中使用的是server_form,需要统一:
要么修改get_context_data调整变量名:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['server_form'] = context.pop('form')
    context['mediator_form'] = self.mediator_form_class()
    context['teacher_formset'] = TeacherFormSet()
    return context

要么修改模板中的{{ server_form | crispy }}为{{ form | crispy }}。

3. FormView的form_valid调用冗余

当前form_valid方法最后调用super().form_valid(form),但父类方法会重复执行表单保存逻辑(你已手动完成保存),可以直接返回重定向:

def form_valid(self, form, mediator_form, teacher_formset):
    self.object = form.save(commit=False)
    self.object.mediator = mediator_form.save()
    self.object.save()

    teacher_instances = teacher_formset.save(commit=False)
    for teacher in teacher_instances:
        teacher.school = self.object
        teacher.save()

    return redirect(self.get_success_url())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:29:58