首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用多选择表单在DJANGO中进行筛选

使用多选择表单在DJANGO中进行筛选
EN

Stack Overflow用户
提问于 2020-06-22 16:55:03
回答 1查看 332关注 0票数 0

我有一个单一的表单输入(见下面),用户可以根据多个属性(如名称、拥有哪些设备、是否拥有具有特定功能和材料功能的设备等)筛选工作室对象。

表格:

表格模板:

代码语言:javascript
运行
复制
    <form method="get" action=".">
        <fieldset>
          <legend>WHAT ARE YOU LOOKING FOR?</legend>
            <div class="suggestion-wrap">
            <span>Workshop</span>
            <span>Equipment</span>
            <span>Materials</span>
            <span>Capabilities</span>
          </div>
            <div class="inner-form">
            <div class="input-field">
              <select multiple placeholder="Type to search..." name="name_contains" id="choices-text-preset-values" class="form-control">

                  {% for Material in material_list %}
                  <option>{{ Material.material }}</option>
                  {% endfor %}

                  {% for MachineType in machinetype_list %}
                    <option>{{ MachineType.machineType }}</option>
                    {% endfor %}

                  {% for Capabilities in capabilities_list %}
                  <option>{{ Capabilities.capabilities }}</option>
                  {% endfor %}

                  {% for Workshop in workshop_list %}
                  <option>{{ Workshop.workshop_name }}</option>
                  {% endfor %}

                  {% for Equipment in equipment_list %}
                  <option>{{ Equipment.equipment_name }}</option>
                  {% endfor %}


              </select>
                <div class="select-dropdown"></div>

                <button class="btn-search" type="submit">
                <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
                  <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
                </svg>
              </button>

            </div>
          </div>


        </fieldset>

        <!-- <button class="btn-submit" type="submit">search</button> -->


      </form>

如您所见,这是一个select多个字段,包含来自每个可搜索类别的选项。它被设计成一个完整的海鲜酒吧。对于这个例子(见上面的图像),Id希望能够显示所有车间,其中有设备,可以磨钢和铝。

当您按search时,URL看起来像:contains=Aluminium

到目前为止,我已经尝试过这样的方法: Views.py:

代码语言:javascript
运行
复制
def BootstrapFilterView(request):
    qs = Workshop.objects.all()

    name_contains_query = request.GET.get('name_contains')

    if is_valid_queryparam(name_contains_query):
        qs = Workshop.objects.filter(Q(workshop_name__icontains=name_contains_query)
                                 | Q(equipment__equipment_name__icontains=name_contains_query)
                                 , Q(equipment__equipment_materials__material__icontains=name_contains_query)
                                 , Q(equipment__equipment_capabilities__capabilities__icontains=name_contains_query)
                                 , Q(equipment__equipment_machineType__machineType__icontains=name_contains_query)
                                 ).distinct()


capabilities_list = Capabilities.objects.order_by('capabilities')
    machinetype_list = MachineType.objects.order_by('machineType')
    material_list = Material.objects.order_by('material')

    equipment_list = Equipment.objects.all()
    workshop_list = Workshop.objects.all()

    print(name_contains_query)
    return render(request, "bootstrap_form.html", {'capabilities_list': capabilities_list,
                                                   'material_list': material_list,
                                                   'machinetype_list': machinetype_list,
                                                   'equipment_list': equipment_list,
                                                   'workshop_list': workshop_list,
                                                   'queryset': qs
                                                   })

此过滤器的目标是显示:

  1. 如果添加了一个带有车间名称的标签,则为研讨会。
  2. 所有车间都有特定的设备,具有特定的性能。

目前,我不知道如何传递所有已输入的搜索标记列表。使用这个网址:contains=Aluminium

过滤器只使用最后一个标签,在这种情况下铝。我怎样才能让它全部使用:磨,钢,铝

我想我可以让它工作,如果我只需要做一个新的数组或列表,所有输入的标签。在这方面的帮助将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 17:04:49

来自django QueryDict getlist() 文档

QueryDict.getlist(key,default=None) 使用请求的键返回数据列表。如果键不存在且不提供默认值,则返回空列表。它保证返回一个列表,除非提供的默认值不是一个列表。

代码语言:javascript
运行
复制
request.GET.getlist('name_contains')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62519583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档