Django中ModelChoiceField获取值返回数字而非对应内容如何解决
问题原因
ModelChoiceField在前端渲染下拉选项时,
<option>的value属性默认绑定对应模型的主键值,所以request.POST中拿到的是原始提交的主键ID,没有经过表单的字段转化逻辑。
你在clean方法里能拿到完整模型对象,是因为clean阶段Django已经自动帮你用主键查询到了对应的模型实例,存在cleaned_data里了。你在clean方法中return对应值不生效的原因是,你本来就没有修改默认返回的实例对象,问题出在你视图里取值的方式不对,和clean方法无关。
解决方法
表单调用is_valid()校验通过后,直接从表单的cleaned_data属性中获取fileToConvert字段,这个值就是对应的csvModel实例对象,你可以直接调用它的所有属性:
# views.py 正确写法 form2 = convertForm(request.POST) if form2.is_valid(): # 从cleaned_data取,已经是csvModel实例 selected_file = form2.cleaned_data['fileToConvert'] # 获取自定义的文件名字段 print(selected_file.csvFileName) # 获取文件访问URL print(selected_file.csvFile.url) # 获取文件本地存储绝对路径 print(selected_file.csvFile.path)
内容的提问来源于stack exchange,提问作者The L
相关产品推荐
相关产品推荐

