python - 未应用过滤器时如何使用 django-filters 保持页面分页?
问题描述
我正在使用 django-filters 来过滤类别和价格。我的问题是,当我过滤结果时,它是分页的,但是当没有应用过滤器时,就没有分页。没有应用过滤器时如何添加分页?提前致谢!
我的过滤器.py:
import django_filters
from .models import Item
class ItemFilter(django_filters.FilterSet):
class Meta:
model = Item
fields = {
'category': ['exact'],
'price': ['lte']
}
我的意见.py:
class homeview(ListView):
model = Item
template_name = 'products/home.html'
paginate_by = 8
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = ItemFilter(self.request.GET, queryset=self.get_queryset())
return context
我的主页.html:
<div class="card">
<div class="card-body">
<div class="container">
<form method="GET">
{{ filter.form|crispy }}
<button type="submit" class="btn btn-primary mt-4">Filter</button>
</form>
</div>
</div>
</div>
<h1 class="mb-4">List Of Items</h1>
<div class="row">
{% for item in filter.qs %}
....
{% endfor %}
解决方案
class ListModelMixin:
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)```
推荐阅读
- sql - Spring Data JPA - 具有多个条件的左连接
- json - 如何在具有多层的 kusto/data explorer 中扩展 JSON 数据?
- python - 有没有办法限制句子中的单词数量?
- laravel - 如何使用 Vue 和 Laravel 访问另一个 docker 卷文件?
- python - 特定单词的 Python 正则表达式
- android - 在 CameraX analyze() 中执行异步代码的最佳方法是什么?
- r - 如何找到数据帧每一行的最小值索引?
- r - 在 Databricks 中调用 R 工作簿
- jquery - 当 JQuery 的其余部分工作时,为什么所有 Ajax 方法都失败了
- python - 说我还没有宣布,即使我清楚地有