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

Python 使用多选择表单在DJANGO中进行筛选,python,html,django,forms,filter,Python,Html,Django,Forms,Filter,我有一个表单输入(见下文),用户可以根据多个属性(如名称、设备类型、设备是否具有特定功能和材料功能等)过滤车间对象 表格: 表单模板: <form method="get" action="."> <fieldset> <legend>WHAT ARE YOU LOOKING FOR?</legend> <div class=&quo

我有一个表单输入(见下文),用户可以根据多个属性(如名称、设备类型、设备是否具有特定功能和材料功能等)过滤车间对象

表格:

表单模板:

    <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>
此筛选器的目标是显示:

  • 如果添加了带有车间名称的标签,则会显示车间
  • 所有车间均配备有特定性能的特定设备
  • 目前,我不知道如何传递输入的整个搜索标签列表。 使用此URL:

    过滤器仅使用最后一个标签,在本例中为铝。我如何才能使用所有这些功能: 钢厂、铝厂


    我想我可以让它工作,如果我可以做一个新的数组或列表的所有输入的标签。非常感谢您的帮助。

    来自django QueryDict
    getlist()

    getlist(键,默认值=None)

    返回具有请求的键的数据列表。返回一个空值 如果密钥不存在且未提供默认值,请列出。 除非提供默认值,否则保证返回列表 这不是一个列表


    我如何使用它进行过滤呢?这似乎是可行的:qs=Workshop.objects.filter(Q(Workshop\u name\uu in=search\u items)| Q(device\uu device\u name\uu in=search\u items)).distinct()
    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
                                                       })
    
    request.GET.getlist('name_contains')