簡體   English   中英

如何在 ListView 類視圖中使用 django-filter 進行搜索?

[英]How to use django-filter with a ListView class view for search?

我有一個過濾器:

class BookFilter(django_filters.FilterSet):

    class Meta:
        model = Book
        fields = '__all__'

和一個 ListView 來查看結果:

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

我想要一個搜索表單,您可以在其中根據類的所有字段進行過濾(例如,X 寫的所有書籍超過 3 顆星)。

如何將表單傳遞給模型,以及如何根據需要使用 get 請求使用 django-filter 進行過濾?

我正在使用 Django 3.0 和 django-filter 2.2.0

我認為所有內容都在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模板進行一些更改,

{% 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. 通過繼承FilterView類更新SearchResultsListView
  2. filterset_class屬性添加到您的SearchResultsListView視圖類
  3. FilterView類自動在get_context_data(...)方法中添加filterset_class類來filter鍵,稍后可以在模板中訪問。
  4. 在模板中使用filter.qs來獲取過濾的查詢集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM