【发布时间】:2020-01-29 17:38:34
【问题描述】:
我有一个小型 Django 项目basic-pagination。有一个模型、一个表单和两个视图(列表视图、表单视图)。用户在表单视图中提交数据,然后数据显示在列表视图中。分页已启用,一次只能显示 5 个帖子。
我实现的是一个带有 GET 响应的表单,用于获取我想要显示的数据(例如姓名、日期)。见下面的代码
class FormListView(ListView):
model = models.ToDoList
paginate_by = 5 # if pagination is desired
template_name = 'pagination/listview.html'
context_object_name = 'forms'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Form List View'
context['filter_form'] = forms.FilterListView(self.request.GET)
return context
def get_queryset(self):
queryset = models.ToDoList.objects.all().order_by('-id')
name = self.request.GET.get('name')
if name:
queryset = queryset.filter(name=name)
order_by = self.request.GET.get('order_by')
if order_by:
queryset = queryset.order_by(order_by)
print(queryset)
return queryset
问题是基于类的视图ListView 调用方法get_queryset 如果您从页面1 移动到页面2 并因此丢失了我想要的过滤查询集。
如何在整个分页过程中保持过滤?
【问题讨论】:
-
这与视图无关:您在模板中编写的 URL 不使用查询中的其他参数,而仅使用
page参数。 -
@WillemVanOnsem 你有解决这个问题的建议吗?
-
你有没有看到这个 SO post 看起来像是在处理一个相关的话题?
-
@Chris 我想我找到了解决办法。我为每个链接更改了
href。例如href="?page={{ page_obj.next_page_number }}"-->href="?page={{ page_obj.next_page_number }}&{{ request.GET.urlencode }}"
标签: python django django-forms django-views