如何在列表视图中获得类似于管理控制台中的列表过滤器?

时间:2018-12-19 00:47:14

标签: django django-admin django-filters django-admin-filters

我正在编写我的第一个Django应用程序,并且在一个ListView中将有数百条记录。我希望用户能够过滤结果。对于任何类型的用户,管理控制台中的过滤器小部件都看起来很直观。但是问题是,我不确定如何在列表视图中获取它们。

我简要地研究了django-filters。但是,我不确定它是否可以帮助我实现类似的功能。

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试这样:

在列表视图的模板中:

<form path="{% url 'your_list_view' %}" method="GET">
    <label for="search">Search: </label>
    <input type="text" name="search">
    <input type="submit" value="OK">
</form>

现在在ListView中使用它:

from django.db.models import Q

class YourListView(ListView):
   search_fields = ['name', 'something_else']
   ...
   def get_querset(self, *args, **kwargs):
       queryset = super(YourListView, self).get_queryset(*args, **kwargs)
       search = request.GET.get('search')
       if search:
          query = list()
          for f in self.search_fields:
              query.append(Q(**{f: search}))
          return queryset.filter(*query)
       return queryset