【问题标题】:How to capture radio box values in Django?如何在 Django 中捕获单选框值?
【发布时间】:2020-05-10 06:25:41
【问题描述】:

我正在做一个 Django 项目。我无法捕获单选按钮值。我想要的是这个 - 如果在三个答案中(三个单选按钮的值分别为 a、b、c,用户选择说 b,那么在答案表中,在三个答案列中,第二列应该捕获 'b ' 并且其他两列中不应存储任何内容(表示空白)。很明显,我现在在 request.POST 中写的“nm”是错误的。

提前感谢您的帮助。

表格代码如下

  <input type="radio" id = "ans1" name = "nm" value = "a" class = "form-control">{{question.ans1}}
  <input type="radio" id = "ans2" name = "nm" value = "b" class ="form-control">{{question.ans2}}
  <input type="radio" id = "ans3" name = "nm" value = "c" class ="form-control">{{question.ans3}}         
  <input type="submit" value="Submit">

views文件中的函数如下

  def updateans(request):
  if request.method == 'POST':
     user_id = request.POST['user_id']
     questionid = request.POST['questionid']
     ans1 = request.POST['nm']
     ans2 = request.POST['nm']
     ans3 = request.POST['nm']
     myans = Answers(questionid_id = questionid, userid_id = user_id, ans1 = ans1, ans2=ans2, ans3=ans3)
     myans.save()

【问题讨论】:

  • 您应该使用表格。没有它,您就不会验证任何用户输入。此外,您的 name 属性必须是唯一的。

标签: html django django-models django-views radio-button


【解决方案1】:

如果没有返回值,您可以使用.get() 方法设置默认值。如果选择为空,这将向数据库添加一个空字符串。 (假设blank=True

  def updateans(request):
  if request.method == 'POST':
     user_id = request.POST['user_id']
     questionid = request.POST['questionid']
     ans1 = 'a' if request.POST.get('nm') == 'a' else ''
     ans2 = 'b' if request.POST.get('nm') == 'b' else ''
     ans3 = 'c' if request.POST.get('nm') == 'c' else ''
     myans = Answers(questionid_id = questionid, userid_id = user_id, ans1 = ans1, ans2=ans2, ans3=ans3)
     myans.save()

【讨论】:

  • 谢谢。然而,这并没有完全奏效。我选择了选项“b”,但我看到“b”放在数据库表中的所有三个答案列中,而不是只显示在第二列中。我还检查了所有答案列的表格和空白=True。
  • 刚刚编辑了我的答案来做你想要的。不确定您是否有以这种方式构建数据库的特定原因,但您可能希望使用单个 CharField 和 A、B 和 C 作为选项,而不是使用 3 个单独的字段。
  • 您好,非常感谢。代码现在可以工作了。实际上,如果我希望 Q 和 A 都在一个表中并且只保留一个 ANS 列(如您所建议的那样),那么这将意味着每个问题都有多行(因为有多项选择答案)。另一种方法是将问题保存在一个表中,将答案保存在另一个表中,但为此,我希望在 Django admin 中建立主从关系,但我不知道该怎么做。在 Django admin 中,我想在 Q 表中输入问题,并将多个答案作为 ANS 表(子表)中的行 - Q 表的 id 键将是 ANS 表中的外键。
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2015-11-12
相关资源
最近更新 更多