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
相关产品推荐
相关产品推荐

