Поиск данных с несколькими значениями в 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>
На этом изображении я ищу студента с годом выпуска 2019 он показывает результат
если я ищу с двумя или тремя значениями, то ничего не показывает, но в базе данных студенты присутствуют
Дело в том, что у вас нет этих данных для всех фильтров поиска, потому что фильтр Django работает с оператором AND
, и на вашем изображении вы сказали дать мне результат, который произошел в 2019 AND 2020
, а это невозможно
фильтр работает, вам просто нужно сохранить правильные данные.