如何在Django中获取单选框值?单选框存储逻辑实现求助
解决Django单选框值获取与答案字段赋值问题
我一眼就瞅出问题所在了:你把三个答案字段ans1、ans2、ans3全直接赋值成request.POST['nm'],但同一组单选框(共用一个name)只会返回用户选中的那一个值,这么写不管选哪个选项,三个字段都会存同一个值,完全不符合你“选b就只把ans2设为'b',另外两列留空”的需求。
来,给你把视图函数的逻辑修正一下:
- 先安全获取用户选中的单选框值——建议用
request.POST.get('nm', '')代替直接取键,避免用户没选就提交时抛出KeyError; - 初始化三个答案字段为空字符串;
- 根据选中的值,给对应的字段单独赋值。
修改后的视图函数代码:
def updateans(request): if request.method == 'POST': user_id = request.POST['user_id'] questionid = request.POST['questionid'] # 获取选中的单选框值,默认空字符串防止报错 selected_value = request.POST.get('nm', '') # 先把三个答案字段初始为空 ans1 = '' ans2 = '' ans3 = '' # 根据选中的值给对应字段赋值 if selected_value == 'a': ans1 = 'a' elif selected_value == 'b': ans2 = 'b' elif selected_value == 'c': ans3 = 'c' myans = Answers( questionid_id=questionid, userid_id=user_id, ans1=ans1, ans2=ans2, ans3=ans3 ) myans.save() # 这里建议加个提交后的反馈,比如重定向到结果页或者返回提示 # return redirect('answer_success_page') # 或者 return HttpResponse("答案提交成功")
另外给你提个小优化:可以给表单里的单选框加上required属性,强制用户必须选一个选项再提交,前端就能拦截未选择的情况,减少后端的异常处理压力,比如:
<input type="radio" id="ans1" name="nm" value="a" class="form-control" required>{{question.ans1}} <input type="radio" id="ans2" name="nm" value="b" class="form-control" required>{{question.ans2}} <input type="radio" id="ans3" name="nm" value="c" class="form-control" required>{{question.ans3}}
内容的提问来源于stack exchange,提问作者user13260019
相关产品推荐
相关产品推荐

