Django表单验证成功后如何更新模型的status属性
错误原因
你直接操作form['status']会报错,是因为form['字段名']返回的是表单字段的渲染实例,不是用来存储字段值的对象,不能直接赋值修改。
正确实现方案
Django的ModelForm提供了save(commit=False)的用法,调用后会返回对应模型的实例,还不会真正写入数据库,你可以修改这个实例的字段值后再手动执行保存即可。另外建议用form.cleaned_data获取经过校验的字段值,比直接取request.POST更安全,修改后的视图代码如下:
def registration(request) : form = GeeksForm(request.POST) # Check if the form is valid: if form.is_valid(): # 从cleaned_data取校验后的手机号 number = form.cleaned_data['contact_number'] print(number) r = requests.get('http://apilayer.net/api/validate?access_key=***********&number=*******&country_code=+91&format=1', params=request.GET) if r.status_code == 200: # 先获取未写入数据库的模型实例 tutor_obj = form.save(commit=False) # 修改status字段值 tutor_obj.status = True # 保存到数据库 tutor_obj.save() # 如果你的模型后续新增ManyToMany字段,需要额外调用form.save_m2m(),当前场景可忽略 return HttpResponse('Yay, it worked') currentID = form.auto_id print(currentID) else : print("Invalid") return render(request, 'Tutorform.html', {'form': form})
内容的提问来源于stack exchange,提问作者Dipesh Pokhrel
相关产品推荐
相关产品推荐

