Фильтры с Django и jQuery - PullRequest
       2

Фильтры с Django и jQuery

0 голосов
/ 06 июля 2019

Я пытался добавить несколько фильтров в проект, над которым я сейчас работаю, чтобы фильтровать видео по годам, жанру, языку и качеству:

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

Когда дело касается жанра, у меня в модели есть поле, называемое тегами, которое представляет собой значения, разделенные запятыми.так, например, если значение - «боевик, комедия, драма», и кто-то ищет жанр «комедия», я хочу, чтобы он мог найти его по этим тегам.

Код Django:

videos = Media.objects.order_by(
    '-date').filter(is_published=True)

if 'genre' in request.GET:
    genre_tags = request.GET['genre']
    if genre_tags:
        genre_tags = videos.filter(tags=genre_tags)

context = {
    'medias': paged_movies,
    'values': request.GET
}
return render(request, 'media_files/listing.html', context)

HTML-код:

<select class="filter-genre">
  <option value="">All</option>
  <option 
  {% if values.genre == 'action' %}
    selected
  {% endif %}
  value="action">Action</option>
  <option
  {% if values.genre == 'adventure' %}
    selected
  {% endif %}
  value="adventure"
  >Adventure</option>
  <option 
  {% if values.genre == 'animations' %}
    selected
  {% endif %}
  value="animations"
  >Animations</option>
  <option 
  {% if values.genre == 'crime' %}
    selected
  {% endif %}
  value="crime"
  >Crime</option>
  <option           
  {% if values.genre == 'horror' %}
    selected
  {% endif %}
  value="horror"
  >Horror</option>
  <option 
  {% if values.genre == 'documentary' %}
    selected
  {% endif %}
  value="documentary"
  >Documentary</option>
  <option 
  {% if values.genre == 'thriller' %}
    selected
  {% endif %}
  value="thriller">Thriller</option>
</select>

jQuery код:

$('.filters form .filter-block select').change(function() {
  var e = location.protocol + '//' + location.host + location.pathname,
    i = (new URL(e), $('.filter-language option:selected').val()),
    t = $('.filter-quality option:selected').val(),
    a = $('.filter-genre option:selected').val(),
    l = $('.filter-year option:selected').val();
  window.location.href = `${e}?lang=${i}&quality=${t}&genre=${a}&year=${l}`;
});

1 Ответ

0 голосов
/ 06 июля 2019

Вы можете использовать "tags__contains" при фильтрации, например, videos.filter (tags__contains = genre_tags) , это проверит наличие указанного значения в поле, но у вас есть чтобы убедиться, что теги совпадают, для совпадения без учета регистра вы можете использовать icontains вместо содержит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...