如何在Django中实现动态多级过滤

问题描述

我不确定标题中是否使用了正确的术语,是否阅读了多面搜索,但涉及使用ElasticSearch,并且我希望它尽可能地简单。

因此,基本上我想做的是能够过滤包含“城市”和“语言”的对象列表。如果我选择一种特定的语言,那么我想查看所有城市使用this语言的对象列表。然后,如果需要,我想进一步使用特定城市过滤此列表。反之亦然-首先是城市,然后是语言。

基本上就是搜索,您可以在其中搜索条件进行细化。

这就是我到目前为止所做的:

forms.py

class SearchForm(forms.Form):
  city = forms.ModelChoiceField(queryset=City.objects.all(),to_field_name='slug',required=False,label='City')
  language = forms.ModelChoiceField(queryset=Language.objects.all(),label='Language')

views.py

class HomePageView(FormView,ListView):
  model = Vacancy
  template_name = 'home.html'
  form_class = SearchForm
  context_object_name = 'vacancies'

  def get_queryset(self):
    city = self.request.GET.get('city')
    language = self.request.GET.get('language')
    if city or language:
      _filter = {}
      if city:
        _filter['city__slug'] = city
      if language:
        _filter['language__slug'] = language
      context = Vacancy.objects.filter(**_filter)
    else:
      context = Vacancy.objects.all()
    return context

home.html

{% block content %}
  <h1>List of vacancies</h1>
  {% for vacancy in vacancies %}
    <p>{{ vacancy }}</p>
  {% empty %}
    <h3>No vacancies</h3>
  {% endfor %}
  <form action="">
    {{ form.as_p }}
    <input type="submit" value="Filter">
  </form>
{% endblock content%}

这很好用,但是可以说没有杂音。

我可以选择城市,它将为我提供this所有语言的城市。如果我随后选择一种特定的语言,它将重新加载表单,然后为我提供所有使用this语言的城市。

为了向下钻取列表,我选择了城市和语言,然后过滤列表。很好,但是如果我可以实现这种动态过滤,那就更好了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)