0

我对基于类的视图相当陌生,但我遇到了问题。

我实现了 get_queryset 来返回我的所有用户(用于测试)并且他们被返回并且分页工作正常(在 get_queryset 之外,我确实设置了“paginate_by”字段)。

然后用户可以通过 POST 搜索一些特定的用户,post 方法的结尾是:

return render(request, self.template_name, {'objects': some_users})

它工作正常,但分页丢失。我究竟做错了什么?

4

2 回答 2

1

分页是在paginate_queryset, 调用者get_context_data, 调用者中完成的post(默认为对 的子调用get),所以你可以这样做(假设你有一个基于发布数据过滤的过滤器方法):

def post(self, request, *args, **kwargs):
    self.queryset = self.filter(self.get_queryset())
    return super(MyView, self).get(request, *args, **kwargs)

父帖子将调用get_queryset,返回您的过滤self.queryset器,并在调用时对其进行分页get_context_data

不显示第一个查询集get

def get(self, request, *args, **kwargs):
    return self.self.response_class(
        request=self.request,
        template=self.get_template_names())

分页模板链接应始终发布到视图而不是默认获取,因此将搜索输入保存在上下文中并更改分页模板,使用

def get_context_data(self, **kwargs):
     context = super(MyView, self).get_context_data(**kwargs)
     context['search_value'] = self.request.POST.get('search_name', None)
     return context

,

<form action="?page={{ page_obj.previous_page_number }}" method="post">
    {% csrf_token %}
    <input type="hidden" value="{{ search_value }}" name="search_name">
    <button type="submit">&laquo;</button>
</form>

对于下一个链接:

<form action="?page={{ page_obj.next_page_number }}" method="post">
    {% csrf_token %}
    <input type="hidden" value="{{ search_value }}" name="search_name">
    <button type="submit">&raquo;</button>
</form>
于 2014-12-02T20:24:16.190 回答
1

我已经使用会话来做这些事情。现在我可以使用 POST 进行搜索,并且分页工作正常

def MySearch(request):
if request.method == 'POST':
    search_text = request.POST.get('search_string')
    request.session['search'] = search_text
    query_set = MyModel.objects.filter(myattribute__icontains=search_text)
    paginator = Paginator(search, 1)
    page = request.GET.get('page')
    search = paginator.get_page(page)
    return render(request, 'myapp/mytemplate.html', {'page_obj': search})

if request.method == 'GET':
    if 'search' in request.session:
        query_set = MyModel.objects.filter(myattribute__icontains=search_text)
        paginator = Paginator(search, 1)
        page = request.GET.get('page')
        search = paginator.get_page(page)
        return render(request, 'myapp/mytemplate.html', {'page_obj': search})
    else:
        return render(request, 'myapp/mytemplate.html')
于 2019-03-07T21:02:14.703 回答