我试图向当前正在研究的项目中添加一些过滤器,以按年份,类型,语言和质量过滤视频:
年份,语言和质量过滤器都可以正常工作,因此我删除了它们的代码。
关于类型,我在模型中有一个称为标签的字段,该字段是逗号分隔的值。因此,例如,如果值是“动作,喜剧,戏剧”,并且有人正在寻找“喜剧”类型,那么我希望他们能够从这些标签中找到它。
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}`;
});
答案 0 :(得分:0)
您可以在过滤时使用“ tags__contains” ,例如 videos.filter(tags__contains = genre_tags),这将检查字段中是否包含指定值,但是您必须确保标签匹配,对于不区分大小写的匹配,可以使用包含而不是包含