使用Django和jQuery进行过滤

时间:2019-07-06 16:14:45

标签: jquery django

我试图向当前正在研究的项目中添加一些过滤器,以按年份,类型,语言和质量过滤视频:

年份,语言和质量过滤器都可以正常工作,因此我删除了它们的代码。

关于类型,我在模型中有一个称为标签的字段,该字段是逗号分隔的值。因此,例如,如果值是“动作,喜剧,戏剧”,并且有人正在寻找“喜剧”类型,那么我希望他们能够从这些标签中找到它。

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 :(得分:0)

您可以在过滤时使用“ tags__contains” ,例如 videos.filter(tags__contains = genre_tags),这将检查字段中是否包含指定值,但是您必须确保标签匹配,对于不区分大小写的匹配,可以使用包含而不是包含