gpt4 book ai didi

python - 如何在 ListView 类 View 中使用 django-filter 进行搜索?

转载 作者:行者123 更新时间:2023-12-04 02:40:52 35 4
gpt4 key购买 nike

我有一个过滤器:

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

最佳答案

我认为一切都在 django-filter 中有详细记录Generic view & configuration 下的文档部分。
django_filters.views.FilterView class 类似于 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 %}

关键点
  • 更新 SearchResultsListView 类通过继承 FilterView 类(class)
  • 添加 filterset_class 归因于您的 SearchResultsListView 查看类
  • FilterView 类自动添加 filterset_class 中的类(class)get_context_data(...) 方法到 filter 键,稍后可以在模板中访问。
  • 使用 filter.qs 在您的模板中获取 过滤查询集
  • 关于python - 如何在 ListView 类 View 中使用 django-filter 进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480402/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com