如何在ListView类视图中使用Djangofilter进行搜索?

2024-09-30 16:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个过滤器:

class BookFilter(django_filters.FilterSet):

    class Meta:
        model = Book
        fields = '__all__'

以及查看结果的列表视图:

class SearchResultsListView(ListView):
    model = Book
    context_object_name = 'book_list'
    template_name = 'book/search_results.html'

我想有一个搜索表,你可以过滤的基础上,所有领域的一个类(例如,所有的书写的X与3星以上)。你知道吗

如何将表单传递给模型,以及如何使用get请求根据需要使用django过滤器进行过滤?你知道吗

我使用的是django3.0和djangofilter2.2.0


Tags: djangoname视图过滤器fields列表modelall
1条回答
网友
1楼 · 发布于 2024-09-30 16:34:07

我认为在Generic view & configuration部分下的django-filter文档中,所有内容都有很好的文档记录。

django_filters.views.FilterView类类似于Django的ListView,您可以使用它来过滤结果。你知道吗

from django_filters.views import FilterView


class SearchResultsListView(FilterView):
    model = Book
    context_object_name = 'book_list'
    template_name = 'book/search_results.html'
    filterset_class = BookFilter # ADD YOUR filterset class

在你的book/search_results.html模板中做一些改变,如mentioned in here

{% extends "base.html" %}

{% block content %}
    <form action="" method="get">
        {{ filter.form.as_p }}
        <input type="submit" />
    </form>
    {% for obj in filter.qs %}
        {{ obj.name }} - ${{ obj.price }}<br />
    {% endfor %}
{% endblock %}

重点

  1. 通过继承类来更新类
  2. filterset_class属性添加到SearchResultsListView视图类
  3. FilterView类自动将get_context_data(...)方法中的filterset_class类添加到filter键中,以后可以在模板中访问该键。你知道吗
  4. 在模板中使用filter.qs来获得过滤查询集

相关问题 更多 >