【问题标题】:forms select2 POST is empty表单 select2 POST 为空
【发布时间】:2018-07-02 15:54:46
【问题描述】:

我正在寻求指导,让我朝着正确的方向前进。我的教授不知所措。对于 select2 多个字段,我的表单中的 POST 存在问题。我有一个是/否标志,它确定要显示哪个选择 2 选择选项。

下面的 javascript 非常适合显示/隐藏。

   $(document).ready(function () {

      $('#option').change(function () {
        $this = $(this)
        $('.select_box').each(function () {
          $select = $('select', this);
          if ($select.data('id') == $this.val()) {
            $(this).show();
            $select.show().select2();
          } else {
            $(this).hide();
            $('select', this).hide();
          }
        });
      });
    });

我的表单有一个是/否/NA 选项,它规定了使用上面的 javascript 显示的选择 2 框。

<select name ="option" class="form-control " id="option">
        <option value="1"> Yes</option>
        <option value="0"> No</option>
        <option value="2"> N/A</option>
</select>

我的表单 POST 使用通用 POST 选项处理,如下所示:

<form action = "{% url 'final' %}" form method = "POST">

在我的表单中,我有 .select_box div 类。选择 2 选项提供正确的字段并正确填充多选。

<div id = "div_yesselect" class="select_box">
    <script src= "{% static '/accounts/option_select2.js' %}" type="text/javascript"></script>
     <select data-placeholder="Please select your course(s)?" data-id="1" class="js-example-basic-multiple" multiple="multiple" id = "id_courseselect" value = "{{course.id}}" style="width: 1110px" >
       {% for course in courses%}
       <option value="{{course.name}}" name = "courseid" >{{course.name}}</option>
       {% endfor %}
     </select>

当用户点击提交按钮时,POST 将通过。当用户选择多个选项或单个选项时,我可以验证表单中的所有字段,除了 select2 选项。

<button class="btn btn-primary " type="submit">Submit</button>

在我的最终视图中,当尝试在 select2 名称上请求 POST 时,它返回一个空集,但表单中的所有其他内容都返回正确的值。为什么 select2 选项不能正确发布?

courselist = request.POST.getlist('courseid')

【问题讨论】:

    标签: javascript django jquery-select2


    【解决方案1】:

    Django 中的表单 POST 取决于名称属性。当你请求courseid时,它会寻找一个name属性等于courseid的元素,意思是:

    courselist = request.POST.getlist('courseid')
    

    需要一个匹配的元素,例如

    <select name="courseid" multiple>
      <option value="1">One</option>
      <option value="2">Two</option>
      <option value="3">Three</option>
    </select>
    

    您需要将 name 属性添加到您的 select 元素,它应该可以工作。

    【讨论】:

    • 我的 name 属性为 name = "courseid"。带有选项 1、2、3 的 select 只是显示/隐藏 select2,即下面的 select 语句。
    • 必须在选择元素上设置名称属性,而不是选项。
    • 我也在 select name 属性上试过了,那是我最初拥有的,但最近将它移到 option 而不是 select。
    • 我想通了,我的字段名称是 course_id 而不是 courseid。对不起,我的错误,你的答案是正确的。
    猜你喜欢
    • 2014-02-22
    • 2021-12-29
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多