[英]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 %}
FilterView
類更新SearchResultsListView
類filterset_class
屬性添加到您的SearchResultsListView
視圖類FilterView
類自動在get_context_data(...)
方法中添加filterset_class
類來filter
鍵,稍后可以在模板中訪問。filter.qs
來獲取過濾的查詢集
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.