Поиск данных с несколькими значениями в django

Хочу фильтровать данные с несколькими значениями в django. Сейчас я могу брать только два значения из html, но фильтровать только одно значение

Это мой views код

   p = request.GET.getlist('passout',[])
   c = request.GET.getlist('course',[])
   s = request.GET.getlist('skill',[])
   
   search_variables = {}

   if p:
       for l in p:
           search_variables['passout__yearofpassing__contains'] = l
           print("@@@@@",p)
   if s:
       for j in s:
           search_variables['skill__skill_name__contains'] = j
   if c:
       for k in c:
           search_variables['course__course_name__contains'] = k
           print("@@kk",k)

   datas_list = Student.objects.filter(
       **search_variables, status="Active").order_by('id')

Это html код

                     <div class="col col-sm-3" style="margin-right:-80px;"> 
                                <select class="selectpicker" id="passout" name="passout"  placeholder="Select YOP" multiple >
                                    {% for j in p %}<option value="{{ j }}" selected>{{i.yearofpassing}}</option>  {% endfor %}
                                            {% for i in yr %}
                                                <option value="{{i.yearofpassing}}">{{i.yearofpassing}}</option>
                                            {% endfor %}
                                </select>
                            </div>  
                            <div class="col col-sm-3" style="margin-right:-80px;" >
                                <select class="selectpicker" name="course" id="course" placeholder="Select Course" multiple >
                                    {% for j in c %}<option value="{{ j }}" selected >{{i.course_name}}</option> {% endfor %}
                                    {% for i in cr %}
                                        <option value="{{i.course_name}}">{{i.course_name}}</option>
                                    {% endfor %}
                                </select>    
                            </div> 
                            <div   class="col col-sm-3" style="margin-right: -350px;">
                                <select class="selectpicker" id="skill" name="skill" placeholder="Select Skills" multiple >
                                    {% for j in s %}<option  value="{{ j }}" selected  >{{i.skill_name}}</option>{% endfor %}
                                    {% for i in sl %}
                                            <option value="{{i.skill_name}}" >{{i.skill_name}}</option>
                                     {% endfor %}
                                </select>    
                            </div> 
                            <button id="search4" style="margin-left: 320px; " class="au-btn  btn-info btn-sm" >Search  </button>
                            <button id="search" style="margin-left: 1px; " class="au-btn  btn-info " > <a href=" {% url 'publicpage' %}" style="margin-left: 8px; height: 40px; color: white;"  title="Reset"> <i style="font-size:medium; margin-bottom: 1px; " class='fas fa-sync'></i></a></button> 
                            

enter image description here

На этом изображении я ищу студента с годом выпуска 2019 он показывает результат

enter image description here

если я ищу с двумя или тремя значениями, то ничего не показывает, но в базе данных студенты присутствуют

Дело в том, что у вас нет этих данных для всех фильтров поиска, потому что фильтр Django работает с оператором AND, и на вашем изображении вы сказали дать мне результат, который произошел в 2019 AND 2020, а это невозможно

фильтр работает, вам просто нужно сохранить правильные данные.

Вернуться на верх