Я пытался добавить несколько фильтров в проект, над которым я сейчас работаю, чтобы фильтровать видео по годам, жанру, языку и качеству:
год, фильтры языка и качества работают очень хорошо, поэтому яудалил их код.
Когда дело касается жанра, у меня в модели есть поле, называемое тегами, которое представляет собой значения, разделенные запятыми.так, например, если значение - «боевик, комедия, драма», и кто-то ищет жанр «комедия», я хочу, чтобы он мог найти его по этим тегам.
Код 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}`;
});