如何在Django中获取模板单选按钮选中值并保存到models中
Django单选按钮数据存储实现方案
现有forms.py代码无需调整,按以下步骤修改即可完成数据存储:
1. 编写models.py定义数据存储模型
首先定义和表单选项匹配的模型,用于持久化存储单选按钮提交的内容:
from django.db import models # 和forms.py中的选项保持完全一致 NUMS = [ ('one', 'one'), ('two', 'two'), ('three', 'three'), ('four', 'four'), ('five', 'fives'), ] class Answer(models.Model): # 存储选中的单选值,max_length要覆盖选项中最长的字符串长度 selected_num = models.CharField(max_length=10, choices=NUMS) # 可选字段:自动记录提交时间,方便后续追溯 submit_time = models.DateTimeField(auto_now_add=True) def __str__(self): return self.selected_num
编写完成后执行数据库迁移命令:python manage.py makemigrationspython manage.py migrate
2. 修正views.py逻辑,完成表单处理与存储
原有视图缺少请求方法判断、表单合法性校验和数据入库逻辑,修改后代码如下:
from .models import Answer from .forms import CHOICES def question1(request): # 仅POST请求处理表单提交逻辑 if request.method == 'POST': form = CHOICES(request.POST) # 校验表单数据格式合法 if form.is_valid(): # 从清洗后的表单数据中取出单选按钮的选中值 selected_val = form.cleaned_data['NUMS'] # 创建模型实例存入数据库 Answer.objects.create(selected_num=selected_val) # 可选:传递提交成功提示到前端 success_msg = "选项提交成功" return render(request, 'question1.html', {'form': form, 'msg': success_msg}) else: # GET请求返回空白表单供用户填写 form = CHOICES() # 确保urls.py中已经配置对应路径指向该视图 return render(request, 'question1.html', {'form': form})
3. 补充模板提交按钮
原有模板缺少提交按钮,无法触发表单提交,修改后代码如下:
<form class="form-inline" method='POST' action="" enctype='multipart/form-data'> {% csrf_token %} {{ form.NUMS }} <!-- 必须添加提交按钮才能触发表单提交 --> <button type="submit" style="margin-left: 12px;">提交选项</button> <!-- 可选:展示提交成功提示 --> {% if msg %} <p style="color: green; margin-top: 10px;">{{ msg }}</p> {% endif %} </form>
4. 可选配置:后台可视化查看数据
在admin.py中注册模型后,即可在Django自带的admin后台查看所有提交的选项:
from django.contrib import admin from .models import Answer admin.site.register(Answer)
内容的提问来源于stack exchange,提问作者Burzi
相关产品推荐
相关产品推荐

