从 Django 的一页中获取选定单选按钮的值

Posted

技术标签:

【中文标题】从 Django 的一页中获取选定单选按钮的值【英文标题】:Taking value of selected radio buttons from one page in Django 【发布时间】:2021-01-19 07:29:54 【问题描述】:

我想在单个页面中获取选定单选按钮的值。在这里解释一下是我在models.py文件中的代码

class Quiz(models.Model):
    Description = models.CharField(max_length=200)

    def __str__(self):
        return str(self.Description)
        

class Question(models.Model):
    Question_Text = models.CharField(max_length=500)
    Option1 = models.CharField(max_length=100)
    Option2 = models.CharField(max_length=100)
    Option3 = models.CharField(max_length=100, blank=True)
    Option4 = models.CharField(max_length=100, blank=True)
    Answer = models.CharField(max_length=100)
    QuizID = models.ForeignKey(Quiz, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.Question_Text)

我希望用户从“Option1、Option2、Option3、Option4”字段中选择一个选项,并且我想获取所选单选按钮的值。

这是我的尝试:

disp.html

<form action="" method="post">
                % csrf_token %
                % for q in question %
                     q.Question_Text  <br>
                    <input type="radio" id="question_ q.Option1 " name=" q.id " value=" q.Option1 ">
                    <label for="question_ q.Option1 "> q.Option1 </label> <br>
                    <input type="radio" id="question_ q.Option2 " name=" q.id " value=" q.Option2 ">
                    <label for="question_ q.Option2 "> q.Option2 </label> <br>
                    % if q.Option3 %
                        <input type="radio" id="question_ q.Option3 " name=" q.id " value=" q.Option3 ">
                        <label for="question_ q.Option3 "> q.Option3 </label> <br>
                    % endif %
                    % if q.Option4 %
                        <input type="radio" id="question_ q.Option4 " name=" q.id " value=" q.Option4 ">
                        <label for="question_ q.Option4 "> q.Option4 </label> <br>
                    % endif %
                % endfor %
                <br> <input type="submit" class="btn btn-primary" value="Submit">
            </form>

现在我想获取所选单选按钮的值。由于记录的数量可能会有所不同,因此我无法手动获取所选单选按钮的值,例如:

first = request.POST.get("11")
second = request.POST.get("18")
third = request.POST.get("19")

这里11,18和19是问题模型中记录的id字段的值。

所以我尝试使用 for 循环按以下方式执行此操作,但我得到“无”作为值。

view.py

def disp(request):
    quiz = get_object_or_404(Quiz, id = 4)
    question = get_list_or_404(Question, QuizID = quiz)

    if request.method == "POST":
        for q in question:
            response = request.POST.get("q.id")
            print(response)


    return render(request, 'quiz/disp.html', 'question' : question, 'quiz' : quiz)

请帮助我获取所选单选按钮的值,或者如果有其他方法可以获取所选单选按钮的值,请建议我

【问题讨论】:

【参考方案1】:

我会重新配置 Question 模型以使用 Choices:

SOME = 'win'
OTHER = 'lin'

Answer_CHOICES = (
    (SOME, 'Some Answer'),
    (OTHER, 'Other Answer'),
)

class Question(models.Model):
    ....
    Options = models.CharField(choices=Answer_CHOICES, max_length=100)
    ....

检查Choices field 以及如何使用它。另外,请检查crispy forms,它会自动为您处理表单输入。

【讨论】:

【参考方案2】:

POST &lt;QueryDict&gt; 仅包含 &lt;str&gt; 类型的键。这意味着request.POST.get(18) 将返回Nonerequest.POST.get('18') 将返回值(假设密钥存在于POST &lt;QueryDict&gt; 中)。

if request.method == "POST":
    for q in question:
        # convert the q.id into str
        response = request.POST.get(str(q.id))
        print(response)

您可以遍历 POST 数据并检查有效密钥。因为,POST 数据包含其他数据,例如 csrfmiddlewaretoken。

将单选按钮名称属性的值改为question_ q.id 的形式。

<input type="radio" id="question_ q.Option1 " name="question_ q.id " value=" q.Option1 ">

循环POST,检查key是否包含question_

if request.method == "POST":
    for k, v in request.POST.items():
        if 'question_' in k:
            # do something

【讨论】:

【参考方案3】:

在 view.py 中,您使用“q.id”作为 HTTP 参数名称,而我认为您希望它是 11、18、19 等。试试这个:-

if request.method == "POST":
    for q in question:
        response = request.POST.get(q.id)
        print(response)

【讨论】:

它仍在打印“None”作为值。 在此处共享整个 POST 数据(request.POST)。

以上是关于从 Django 的一页中获取选定单选按钮的值的主要内容,如果未能解决你的问题,请参考以下文章

Android从选定的单选按钮获取价值

Yii 使用 Jquery 从单选按钮列表中获取选定的值

在 vue 组件上提交表单时如何获取值单选按钮?

Django:在视图中使用选定的单选按钮的值来更新数据库中的值

javascript获取选定的html单选按钮输入的值[重复]

checkbox的选中全选返选获取所有选中的值所有的值单选全部时父选中